파이썬에서는 GIL 때문에 스레드를 늘리는 것은 의미가 없나요?
--> 그렇다. 병렬 프로그래밍을 하려면 멀티 프로세싱을 해야한다.
--> 멀티 프로세싱을 사용하면 코어 개수만큼 병렬처리가 가능하다.
--> 각 프로세스의 단일 스레드가 코어와 1:1로 매칭되어 병렬적으로 실행 되는 것!
--> (하나의 프로세스 내에 스레드가 여러개더라도 GIL 때문에 하나의 스레드만 실행이 가능함)
--> 즉, 코어 개수만큼 병렬 프로그램을 실행하고 싶으면 코어 개수만큼의 프로세스를 생성하고, 단일 스레드로 실행 해야한다.
그런데 threading 이라는 모듈을 사용하면 수행시간이 줄어드는 것은 어떻게 이해하면 되나요?
--> I/O bound task 일 경우에는 멀티스레딩이 성능 개선에 도움된다!
--> 병렬 프로그래밍을 하려면 멀티 프로세싱(GIL 때문에 각 단일 스레드)을 해야한다
--> 하지만, I/O bound task 에서는 멀티스레딩이 성능에 도움이 된다.
--> 즉, 멀티 프로세싱을 사용할때 I/O bound task가 많다고 예상되면, 멀티 스레딩을 같이 사용하자.
https://docs.python.org/3/library/threading.html
https://chacha95.github.io/2020-12-19-python4/
https://dgkim5360.tistory.com/entry/understanding-the-global-interpreter-lock-of-cpython
https://thrillfighter.tistory.com/621
https://lazymankook.tistory.com/32
https://medium.com/@tarunjain07/multi-vs-multi-cb9b0ec382ad
'Python > 기타' 카테고리의 다른 글
(스크랩) 파이썬에서 여러 REQUEST 동시에 보내기 (0) | 2022.02.16 |
---|---|
(스크랩) ★★★파이썬에서 스레드/프로세스 풀 사용하기 (feat. 비동기 처리하기) (0) | 2022.02.14 |