멀티 쓰레드를 사용한다고 싱글 쓰레드에 비해서 무조건 작업 속도가 빨라지지 않는다.
이유는 파이썬의 GIL(Global Interpreter Lock) 때문인데, 다른 블로그의 글을 인용하자면 CPython에서의 GIL은 Python 코드(bytecode)를 실행할 때에 여러 thread를 사용할 경우, 단 하나의 thread만이 Python object에 접근할 수 있도록 제한하는 mutex이다. 그리고 이 lock이 필요한 이유는 CPython이 메모리를 관리하는 방법이 thread-safeness하기 때문이다.
결국 같은 시간에 실행되는 쓰레드는 무조건 1개이며, 멀티 쓰레드는 GIL이 적용되지 않는 즉, CPU 동작이 아닌 I/O 동작이 많은 프로그램에 구현했을 때 가장 이상적이다.
그렇다면 왜 파이썬은 GIL를 선택했는가? 파이썬이 개발되던 시대는 쓰레드의 개념이 없었고, 유용한 C extension이 이미 많이 개발되었으며, 쉽고 개발이 빠른 파이썬을 찾는 개발자가 점점 많아졌다. 이에 파이썬이 선택 가능한 가장 현실적인 방법은 GIL이었고, GIL을 이용하여 파이썬 기능에 필요한 많은 C extension들을 일괄적으로 간단하게 thread-safe memory management 할 수 있게 되었다.
참고 1: https://dgkim5360.tistory.com/entry/understanding-the-global-interpreter-lock-of-cpython
참고 2: realpython.com/python-gil/
'파이썬' 카테고리의 다른 글
[파이썬] GPU 정보 출력 (0) | 2023.04.05 |
---|---|
[파이썬] Selenium과 Threading을 이용하여 구글 이미지 크롤링 (8) | 2021.05.26 |
[파이썬] doc2vec 모델 학습, 저장 및 불러오기 (0) | 2020.11.24 |
[파이썬] OpenCV, Pandas를 이용하여 LATCH 정보 출력 (2) | 2020.09.12 |
[파이썬] 특수문자 비교 관련 (0) | 2020.09.11 |