GIL 이란?
Global Interpreter Lock의 약자로 전역 인터프리터 락이다.
여러 개의 쓰레드가 파이썬 코드를 동시에 실행하지 못하도록 하는 것이다. 한 프로세스 내에서, Python 인터프리터는 한 시점에 하나의 쓰레드에 의해서만 실행될 수 있다. 멀티 쓰레딩이 불가능하다는 것이 아니다. 원래 멀티 코어라면 멀티 쓰레딩 시에 여러 개의 쓰레드가 여러 코어 상에서 병렬(Parallel) 실행될 수 있는데, Python에서는 그러한 병렬 실행이 불가능하다.
GIL이 있는 이유
파이썬에서 모든 것은 객체이고 이것들은 Reference Count가 관리가 된다. Reference Count가 0이 되면 Garbage collector가 객체를 메모리 해제시킨다.
그러나 여러개의 쓰레드가 동시에 파이썬 인터프리터를 실행하면 Race condition이 발생할 수 있고, 이를 방지하기 위해 GIL을 도입했다.
그러나 GIL은 CPython에 존재하기 때문에 JPython과 같은 다른 구현체를 사용한다면 우회할 수 있다.
또한 병렬처리를 해야 한다면 멀티 프로세스를 사용하자.
cf) 아래 글을 보면 파이썬 3.12 버전에서 컴파일 flag에 nogil 옵션을 넣을 수 있게 한다는 움직임이 있다고 한다.
https://pyfound.blogspot.com/2022/05/the-2022-python-language-summit-python_11.html?m=1
참고 자료
https://it-eldorado.tistory.com/160
'Python3' 카테고리의 다른 글
[Python3] local, global 변수 규칙 (0) | 2022.05.01 |
---|