Python GIL
GIL이란?
GIL 은 스레드에서 사용되는 Lock 을 인터프리터 레벨로 확장한 개념
여러 스레드가 동시에 실행되는걸 방지한다
어느 시점이든 하나의 Bytecode 만이 실행되도록 강제한다
각 스레드는 다른 스레드에 의해 GIL 이 해제되길 기다린 후에야 실행될 수 있다
멀티 스레드로 만들었어도 본질적으로 싱글 스레드로 동작
장점
: GIL 을 활용한 멀티 스레드가 그렇지 않은 멀티 스레드보다 구현이 쉬우며, 레퍼런스 카운팅을 사용하는 메모리 관리 방식에서 GIL 덕분에 오버헤드가 적어 싱글 스레드일 때 fine grained lock 방식 보다 성능이 우월하다
단점
성능 문제
GIL 때문에 성능 문제가 대두되는 경우는 압축, 정렬, 인코딩 등 수행시간에
CPU 의 영향이 큰 작업(CPU bound)
을멀티 스레드
로 수행하도록 한 경우다이 땐 GIL 때문에 멀티 스레드로 작업을 수행해도 싱글 스레드일 때와 별반 차이가 나지 않는다
이를 해결하기 위해선
멀티 스레드
는 파일, 네트워크 IO 같은IO bound 프로그램
에 사용하고멀티 프로세스
를 활용해야한다
Last updated