Python GIL

GIL이란?

  • GIL 은 스레드에서 사용되는 Lock 을 인터프리터 레벨로 확장한 개념

  • 여러 스레드가 동시에 실행되는걸 방지한다

    • 어느 시점이든 하나의 Bytecode 만이 실행되도록 강제한다

  • 각 스레드는 다른 스레드에 의해 GIL 이 해제되길 기다린 후에야 실행될 수 있다

    • 멀티 스레드로 만들었어도 본질적으로 싱글 스레드로 동작

장점

: GIL 을 활용한 멀티 스레드가 그렇지 않은 멀티 스레드보다 구현이 쉬우며, 레퍼런스 카운팅을 사용하는 메모리 관리 방식에서 GIL 덕분에 오버헤드가 적어 싱글 스레드일 때 fine grained lock 방식 보다 성능이 우월하다

단점

성능 문제

  • GIL 때문에 성능 문제가 대두되는 경우는 압축, 정렬, 인코딩 등 수행시간에 CPU 의 영향이 큰 작업(CPU bound)멀티 스레드로 수행하도록 한 경우다

  • 이 땐 GIL 때문에 멀티 스레드로 작업을 수행해도 싱글 스레드일 때와 별반 차이가 나지 않는다

  • 이를 해결하기 위해선 멀티 스레드는 파일, 네트워크 IO 같은 IO bound 프로그램에 사용하고 멀티 프로세스를 활용해야한다

Last updated