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 

 

The 2022 Python Language Summit: Python without the GIL

If you peruse the archives of language-summit blogs, you’ll find that one theme comes up again and again : the dream of Python without the...

pyfound.blogspot.com

 

참고 자료

https://it-eldorado.tistory.com/160

 

[Python] GIL (Global Interpreter Lock) 이해하기

이번 포스팅은 Python만의 특징 중 하나인 GIL(Global Interpreter Lock)의 개념에 대해 알아볼 것이다. Python 프로그래머라면 한 번쯤은 들어봤을 법한 용어지만, 정확하게 알고 있지 못한 분들도 많을 것

it-eldorado.tistory.com

 

'Python3' 카테고리의 다른 글

[Python3] local, global 변수 규칙  (0) 2022.05.01
복사했습니다!