[Python] 01. Python에서 GIL이 존재하는 이유

python에 GIL이 존재하는 이유

GIL은 Global Interpreter Lock의 줄임말이다.

간단히 요약하면 Python 인터프리터에 하나의 스레드에서만 접근이 가능하도록 제한을 걸어둔 것을 의미한다.

이러한 제한이 걸린 이유를 이해하기 위해서는 Python의 Garbage Collection 이 작동하는 원리에 대해 먼저 알아야 한다.

  • Python의 Garbage Collection

    Python에서는 각 객체가 참조될때 Reference Counts가 이루어진다. 즉, 객체가 참조될때 카운팅이 되고 삭제되면 카운팅된 값이 줄어들게 된다. 이때 카운팅된 값이 0이되면 메모리에서 할당된 부분이 삭제되게 되는 방법이다.

  • 멀티쓰레드를 사용하면 발생할 수 있는 문제점

    멀티쓰레드를 사용하고 있는 상태라면 하나의 객체를 여러개의 쓰레드에서 동시에 접근하는 경우가 생길 수 있다. 즉, race condition이 발생할 수 있는것이다.

    이를 해결하기위해 객체에 lock을 걸어주어야 하는데, 만약 모든 객체에 lock을 걸어준다면 프로그램 전체적인 실행속도가 상당히 느려지고, 경우에 따라 deadlock이 걸릴 수 있다.

  • 해결방법

    따라서 이러한 상황에서 발생될 수 있는 문제를 해결하기위해 Python에서는 가장 간단하고 확실한 방법을 적용하였다.

    Python 인터프리터에 하나의 스레드에서만 접근이 가능하도록 제한을 걸어 문제가 될만한 상황을 차단해 버린 것이다.

즉, 이러한 문제가 발생되는 것을 막기위해 파이썬은 GIL이라는 개념을 도입하게 된 것이다.


© 2020. All rights reserved.