멀티스레딩
- 하위 문제 중 하나의 다른 작업이 완료되는 동안 기다려야 하는 경우 싱글 스레드보다 멀티 스레딩이 좋다. (Ex : I/O 과중한 작업)
- The interpreter will reacquire this lock for every 100 bytecodes of Python instructions and around (potentially) blocking I/O operations.
- 같은 프로세스 안에서 동작하므로 자원 공유가 가능 (queue, pickle 사용)
멀티 프로세스
- 하위 문제가 동시에 발생하는 경우
- 하지만 코어수보다 많은 수를 사용하면 성능 저하가 올 수 있다. (https://stackoverflow.com/questions/40217873/multiprocessing-use-only-the-physical-cores)
파이썬에서 싱글 스레딩 vs 멀티 스레딩을 사용해야 하는 경우
I/o가 많은 작업에 대한 이점 == 멀티스레딩
만일 웹 url의 데이터를 가져와서 처리하는 로직이 있을 경우 다운로드에 대한 시간이 있으므로 단일 스레드 구현은 상당한 I/O 바인딩이 됩니다.. 이때 각 다운로드 리소스에 새 스레드를 추가함으로써 다운로드 스레드, 처리 스레드를 통해 다운로드 동안의 I/O 블록을 피할 수 있습니다..
Cpu 연산이 많을 경우 == 싱글 스레딩
많은 재무 응용 프로그램처럼 숫자가 많이 사용되어 cpu 종속일 경우 GIL의 한계에 의해 멀티 스레딩의 이점이 없습니다.
멀티 프로세싱을 해야 하는 경우
- GIL의 회피를 통해, 각 프로세스별 cpu코어를 활용해야 하는 경우
- but 프로세서간 데이터 통신이 있다면 I/O 오버헤드 발생 (프로세스 간의 통신이 없는 경우가 베스트!!)
- 데이터가 프로세스 위주의 연산이라면 속도 향상 가능 (각각의 프로세스가 나눠서 계산하기 때문에)
'app > python' 카테고리의 다른 글
python에서 pow(n, n) 와 n**n 중 어느게 빠를까? (1) | 2020.03.07 |
---|---|
파이썬 백엔드 면접 질문들 (장고+시스템+디비 포함) (0) | 2020.02.21 |
python의 팩토리 패턴과 partial (0) | 2020.01.10 |
왜 python의 http 헤더 파서는 email 클래스에 있는가??!! (0) | 2020.01.05 |
[python] 서버를 만들어보자(1) echo-server (0) | 2019.12.10 |