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
프로세스리스트 선언
공유 메모리 관리 매니저 사용하여 공유메모리 관리
프로세스 생성 및 실행하기
'Python' 카테고리의 다른 글
[ Python : 동시성과 병렬성 문법 배우기 ] 2. Parallelism with Multiprocessing (0) | 2021.08.01 |
---|---|
[ Python : 동시성과 병렬성 문법 배우기 ] 1. Multithreading (0) | 2021.08.01 |
[Python 고급] 2. Meta class (0) | 2021.08.01 |
[Python 고급] 1. variable scope, context Manager (0) | 2021.07.31 |
[Python 중급] 2. 파이썬 병행성 (0) | 2021.07.31 |