본문 바로가기
Programming/Python

[Python] GIL(Global Interpreter Lock)

by dev_ss 2022. 10. 15.

GIL 참고자료

파이썬에는 GIL(Global Interpreter Lock)이라는 특수한 개념이 존재하고 있다.

 

위의 사진에서 보는 것처럼 프로세스를 작업할 때 CPU의 한 개 쓰레드에 객체 접근 권한과 가용 자원을 전부 할당하고 타 쓰레드에서는 접근을 하지 못하도록 Lock(Mutex)을 하는 것이다.


  • 왜 파이썬에 GIL이 존재하는가?

GIL의 존재 이유를 알아보기 앞서 파이썬의 메모리 관리 체계를 알아 볼 필요가 있다.

 

파이썬은 OOP 기반으로 파이썬 내에는 객체들이 존재하고 이들은 별도로 참조 횟수(Reference Count)를 저장하고 있다.

메모리에 저장된 객체를 직접 삭제하는게 아니라면 보통 참조 횟수를 이용하여 참조 횟수가 0이 되었을 때 파이썬 내부의 GC(Garbage Collector)가 메모리에 있는 객체를 삭제하게 된다.

 

여기서 Multi-Threading 방식을 통하여 한 객체에 동시 다발적으로 접근을 하게 된다면 참조 횟수를 통한 문제가 생길 수 있고 이는 레이스 컨디션(Race Condition)를 야기하여 GC의 부적절한 결과를 발생 시킬 수 있기 때문에 GIL을 통해 객체에 접근하는 쓰레드를 제한하는 것이다.

 

* 레이스 컨디션(Race Condition) : 다중 처리 시스템에서 두 명령어가 같은 메모리에 접근할 때 그들 사이에 경쟁이 발생하여 수행 결과를 예측할 수 없게 되는 현상


반응형

'Programming > Python' 카테고리의 다른 글

[Python] "_" in Python (Underbar)  (0) 2022.10.30
[Python] 생성자(__init__)와 소멸자(__del__)  (0) 2022.10.21
[Python] 파이썬이란  (0) 2022.10.13