오늘 면접 보다가 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
2. https://it-eldorado.tistory.com/160
3. https://python.land/python-concurrency/the-python-gil
'Python' 카테고리의 다른 글
Python 3.10 변경점 알아보기 - 1. Parenthesized context managers, Better error messages (0) | 2023.01.28 |
---|---|
WSL2 환경에서 Poetry 사용하기 (0) | 2023.01.16 |
[Celery] - 시작하기 (0) | 2022.12.08 |
컴파일이란 (0) | 2022.12.07 |
Python 알아보기(1) - 파이썬의 특징 (2) | 2022.12.06 |