Python

[Python] GIL이 뭐죠?

r잡초처럼 2022. 12. 21. 22:47

오늘 면접 보다가 GIL 관련 얘기가 나왔다. 이름은 들어봤다. 보기도 봤고, 하지만 설명할 수 없었다. 그럼 모르는 거지....

GIL이 뭔지 파헤쳐보자.

1. GIL이란?

GIL은 Global Interpreter Lock의 약자이다. 이게 뭔고 하니 Python 문서에서 살펴보니 다음과 같이 설명한다.

In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once.

Python 개체에 대한 엑세스를 보호하며 여러 스레드가 Python 바이트 코드를 한 번에 실행하는 것을 방지하는 뮤텍스입니다.

그렇다면 왜 여러 스레드가 실행하는 것을 막을까?

바로 스레드 안정성 때문에 그렇다.(참고) Python  스레드는 동일한 메모리를 공유하는데, 이때 여러 스레드가 동시에 실행되는 경우 스레드가 공유 데이터에 액세스 하는 순서를 알 수 없다.(Race Condition) 이렇게 CPython의 메모리 관리가 스레드로부터 안전하지 않기 때문에 GIL을 발명했다고 설명한다. 결국 한 프로세스는 하나의 스레드만 실행되므로 CPython은 공유 메모리의 경합 상태가 발생하지 않는다. 

2. 그렇다면 멀티 스레딩을 사용할 수 없을까?

파이썬에서 멀티 스레딩을 하려고 구글링을 하다보면 싱글 스레딩을 할 때보다 성능이 저하된다고 설명한다. 그렇다면 멀티 스레딩은 파이썬에서 쓸모가 없을까? 결론부터 말하자면 쓸모가 있다. 예를 들어 외부 연산(I/O, Sleep 등)과 같이 공유 자원으로 접근을 하는 작업을 할 때에는 멀티 스레딩이 큰 덕을 볼 수 있다.


자세한 내용은 이 블로그에 친절하게 쓰여있으니 읽어보도록 하자.


참고

1. https://wiki.python.org/moin/GlobalInterpreterLock

 

GlobalInterpreterLock - Python Wiki

In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. The GIL prevents race conditions and ensures thread safety. A nice explanation of how t

wiki.python.org

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

 

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

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

it-eldorado.tistory.com

3. https://python.land/python-concurrency/the-python-gil

 

The Python GIL (Global Interpreter Lock)

The Python GIL makes sure there is only one thread running at any time, which is both a blessing and a curse.

python.land