Python GIL

gh1224·2022년 11월 13일

GIL

GIL

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의 GC

파이썬의 GC는 객체의 참조 횟수가 0이 되면 객체 메모리를 해제함.
여러 스레드가 동시에 객체에 접근하면 race condition 발생하여 참조 횟수를 관리함에 있어 Thread-safe하지 않음.
모든 객체에 lock을 거는 방식은 관리하기 어려우니 GIL 사용.

멀티스레드 속도

CPU bound job에서는 결국 순차적으로 실행되는데 context switching 비용만 증가하여 비효율적.
I/O bound job에서는 I/O 작업 동안 다른 스레드가 실행되므로 성능 개선.

생각

  • 자바에서의 GC, 스레드와 비교해봐야 할 듯함.
  • 반려동물 카메라에서는 time.sleep() 동안 다른 스레드가 실행될 테니 원래의 의도대로 잘 구현한 것 같음.
  • 이 내용에 따르면 푸시버튼의 입력을 기다리는 wait_for_press 함수는 I/O bound job을 가지고 있다는 뜻이 되는데 확인해 봐야 할 것 같음.
    (Event를 사용하던데 Event에 대한 이해가 필요할 듯함)

참고한 글

0개의 댓글