파이썬의 GIL(Global Interpreter Lock)
ProgrammingGIL(Global Interpreter Lock)의 존재 이유
멀티스레딩 환경에서 CPython의 경우 메모리 관리목적으로 reference count를 측정하는데, 이때 race condition이 일어나서 메모리 누수가 일어나거나, 사용중인 객체의 해제등의 치명적인 문제가 발생할 수 있기 때문에 각 객체에 락을 거는 방안을 생각했으나, 이 또한 동시에 여러개의 객체에 락이 걸리게 되면서 데드락의 문제가 발생할 수 있어, 파이썬 바이트코드 단위에 락을 걸어 두가지의 문제를 해결 할 수 있지만 한편으로는 이로 인해서 싱글 스레드로 동작할 수 밖에 없는 환경이 만들어지게 되었다.
GIL이 최선의 방안이었을까? 혹은, 단순히 파이썬 개발진의 잘못된 선택은 아니었을까?
역설적으로 GIL로 인해서 파이썬이 추구하던 쉽고 빠른 개발의 디자인을 완성할 수 있게 되었다. C로 작성된 많은 확장 프로그램들이 파이썬으로 옮겨질때 양측의 조화를 위해 thread-safe한 메모리의 제공이 필요했는데 GIL이 이 역할에 제격이었던 것이다. 이로써 thread-safe하지 않은 C 프로그램들이 python으로 쉽게 확장 될 수 있었다.
Reference
'Programming' 카테고리의 다른 글
XPath 사용방법 (0) | 2020.04.21 |
---|---|
Python scrapy 사용법 (0) | 2020.04.21 |
pre-emptive multitasking vs cooperative multitasking (0) | 2020.04.12 |
Python2 pwntools SyntaxError: invalid syntax 해결방법. (0) | 2020.04.03 |
Bash 매개변수 확장 (0) | 2020.03.31 |