🐍 Python Devs Shocked! Multithreading Ahead!
C++ 개발자나 JAVA 개발자 분들과 얘기를 하다가 병렬처리를 해야할 때, python의 경우 멀티프로세싱으로 처리하는게 좀 더 파이썬에게는 유리하다고 얘기를 하면 이해를 못하는 경우가 있다. 파이썬의 GIL이라는 속성 때문에, 그렇다는 말을 하면 그런 언어(?)가 어디 있느냐는 얘기까지 듣게 된다.
하지만, 이제 그런 오해(?)로부터 자유로워 질 수 있을 것 같다. 조만간, GIL을 해제하는 옵션이 탑재된 파이썬 버전이 나올 수도 있기 때문이다. 위의 기사는 GIL을 해제하려는 움직임과 멀티스레딩을 둘러싼 파이썬 개발자들 간의 논쟁의 역사등을 소개하고 있다.
간단하게 위의 기사를 요약하자면 다음과 같다.
예에에엣날에 2번의 경우 강제로 파이썬을 여러개로 쓰레드로 사용하게 되는 경우, 싱글 스레드로 연산을 수행할 때보다 연산단계각 많아져 최대 30% 까지 속도가 저하되었다고 한다.
PEP 703 – Making the Global Interpreter Lock Optional in CPython | peps.python.org
파이썬은 생각보다 오래된 언어고, 개발 될 당시의 CPU의 구조는 싱글 코어 싱글 스레드였다. 하드웨어의 발전과 함계 언어의 발전에 대한 요구이기도 하지만, 근래에 가장 강력하게 푸싱 받는 이유는 인공지능 소프트웨어의 발전에도 상당한 이유가 있다.
위의 기사에도 소개된 PEP-703에 해당 이슈가 자세하게 소개되어 있다. 이를 간단하게 설명하자면 다음의 이유로 파이썬의 멀티 쓰레딩에 대한 요구사항이 늘어나고 있다.
위의 링크에 각 부분에 대한 내용이 자세하게 기술되어 있다. 각 이유 대부분 파이썬의 인공지능 프레임워크와 관련된 문제가 예시로 드러나며 해당 문제의 원인으로 GIL을 가리키고 있다.
threading 모듈이나 파이썬으로 멀티쓰레딩하던 건 뭐야?What's the point of multithreading in Python if the GIL exists?
그렇다면, 우리가 그동안 사용하고 있던 파이썬의 스레딩은 무엇인가? 라는 물음이 자연적으로 들 수 밖에 없다. 해당에 대한 물음에 대한 질문과 답변에 대한 스택오버플로우 링크이고 이를 간단하게 줄여서 설명하자면 다음과 같다.
먼저, threading 모듈에서 사용되는 스레드는 실제의 스레드들이다. GIL은 순수하게 파이썬으로 작성된 상황에서만 동작한다. 그리고, 여러 가지 경우에 GIL가 적용되지 않는 경우들이 있는데 다음과 같다.
이 중에서 numpy의 경우는 알고 있었는데, 1번과 2번의 경우는 알고 있지 못 했다.