Python

[ Python : 동시성과 병렬성 문법 배우기 ] 3. Concurrency CPU Bound, I/O Bound

noahkim_ 2021. 8. 1. 17:02

1. Concurrency

논리적인 개념

CPU의 가용성을 극대화함. 싱글코어에 멀티스레드 패턴을 사용함. 

일정량을 처리 후 다음 작업으로 넘김. 

제어권을 주고받으며 작업하는 패턴

 

(vs Parallelism)

물리적. 멀티코어. 별개의 작업 처리 후 합침

 

2. Blocking I/O vs Non-Blocking I/O

Blocking I/O : 시스템 콜 요청시 커널 I/O 작업 완료시까지 응답을 대기함. 

제어권을 커널이 소유. 응답전까지 대기(block) -> 다음 작업 수행 X

 

Non-Blocking I/O : 커널 I/O 작업 완료 여부 상관없이 즉시 응답. 주기적으로 시스템 콜을 통해서 I/O 작업 완료 여부 확인

 

Async : I/O 작업 완료 여부에 대한 Noty는 커널에서 유저로 전달됨

Sync :  I/O 작업 완료 여부에 대한 Noty는 유저가 커널에게 계속 물어봄.

 

3. multiprocessing vs Threading vs Async

CPU는 IO바운드 처리가 가능함

 

  • CPU Bound
    프로세스 진행이 CPU에 의해 제한됨 

  • I/O Bound
    파일 쓰기, 디스크 작업, 네트워크 통신, 시리얼포트 송수신
    -> 작업에 의해 수행 시간(병목) 이 발생
    => 작업 목적에 따라 적절한 동시성 라이브러리를 사용하여 처리하기

 

4. I/O Bound - Synchronious

요청에 응답이 올 때까지 인터프리터는 Blocking됨 ( 순서대로, 응답이 올 떄까지 대기)

 

 

5. I/O Bound - threading, asyncio, multiprocessing

각 프로세스는 독립적이며 공유하지 않음

 

threading :멀티스레드를 실행하여 처리함.

multiprocessing : 멀티프로세싱 실행 . 프로세서 갯수 조정후 사용하기. 실행 시 병렬화됨

asyncio : 비동기 함수. 'coroutine object'가 반환됨.


6. CPU Bound - Synchronous

프로세스의 요청을 적게 받음 (I/O Bound 최소화)

CPU 계산능력을 최대로 활용 (머신러닝, 블록체인 ..)

 

7. CPU Bound - Multiprocessing

프로세스리스트 선언

공유 메모리 관리 매니저 사용하여 공유메모리 관리

프로세스 생성 및 실행하기