728x90

1. 동기

작업이 순차적으로 실행됨

 

2. threading (동기, i/o-bound 병렬처리)

I/O bound 동기 작업을 병렬 처리하는 데에 사용

스레드는 별도의 실행 흐름을 생성하고 여러 스레드를 사용하여 동시에 여러 작업을 수행

I/O 바운드 작업에서는 효과적으로 동작할 수 있지만, CPU 바운드 작업에서는 GIL(Global Interpreter Lock)로 인해 병렬성의 이점을 얻기 어려움 (프로세스 하나, 메모리 공유)

 

3. asyncio.gather (비동기, i/o-bound 병렬처리)

I/O bound 비동기 작업을 병렬 처리하는 데에 사용

하나의 이벤트 루프 내에서 여러 작업이 비동기적으로 실행

각 작업이 I/O 바운드 작업이라면 이벤트 루프가 대기 중인 작업을 계속해서 실행 가능

비동기 작업은 비동기 함수 안에서 await를 통해 비동기적으로 실행되기 때문에, 메모리 공유 측면에서는 주로 이벤트 루프 내에서 발생하므로 스레딩보다는 적은 동시 액세스가 발생

I/O 바운드 작업에서는 효과적으로 동작할 수 있지만, CPU 바운드 작업에서는 GIL(Global Interpreter Lock)로 인해 병렬성의 이점을 얻기 어려움 (프로세스 하나, 메모리 공유)

 

4. multiprocessing (cpu-bound 병렬처리)

CPU bound 작업을 병렬처리하는 데 사용

각 프로세스는 독립적인 메모리 공간을 가지고 있어 GIL(Global Interpreter Lock)의 영향을 받지 않아 CPU 바운드 작업에서 높은 병렬성을 얻을 수 있음

프로세스 간 통신이나 데이터 공유는 복잡하고 오버헤드가 큼

 

 

728x90

+ Recent posts