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.
파이썬 인터프리터가 한 번에 하나의 바이트코드만 실행할 수 있도록 제한.
-> 스레드가 병렬적으로 실행될 수 없음
파이썬의 GC는 객체의 참조 횟수가 0이 되면 객체 메모리를 해제함.
여러 스레드가 동시에 객체에 접근하면 race condition 발생하여 참조 횟수를 관리함에 있어 Thread-safe하지 않음.
모든 객체에 lock을 거는 방식은 관리하기 어려우니 GIL 사용.
CPU bound job에서는 결국 순차적으로 실행되는데 context switching 비용만 증가하여 비효율적.
I/O bound job에서는 I/O 작업 동안 다른 스레드가 실행되므로 성능 개선.