글로벌 인터프리터 잠금

Global interpreter lock

Global Interpreter Lock(GIL; 글로벌인터프리터 잠금)은 한 [1]번에 하나의 네이티브 스레드만 실행할 수 있도록 스레드 실행을 동기화하기 위해 컴퓨터 언어 인터프리터에서 사용되는 메커니즘입니다.GIL을 사용하는 인터프리터는 멀티코어 프로세서에서 실행되는 경우에도 한 번에 정확히1개의 스레드를 실행할 수 있습니다.GIL을 사용하는 인기 있는 인터프리터로는 CPython과 Ruby MRI가 있습니다.

기술적 배경 개념

글로벌 인터프리터 잠금(GIL)은 다른 스레드와 스레드 세이프가 아닌 코드를 공유하지 않기 위해 프로그래밍 언어 인터프리터 스레드에 의해 유지되는 상호 제외 잠금입니다.GIL을 사용한 구현에서는 인터프리터 프로세스별로 항상 GIL이 1개씩 존재합니다.

GIL을 사용한 구현에서 실행되는 애플리케이션은 개별 프로세스를 사용하여 완전한 병렬 처리를 수행하도록 설계할 수 있습니다. 각 프로세스에는 자체 인터프리터가 있고 그 결과 자체 GIL이 있기 때문입니다.그렇지 않으면, GIL은 병렬화에 상당한 장벽이 될 수 있습니다.

이점

글로벌 인터프리터 잠금을 사용하는 이유는 다음과 같습니다.

  • 싱글 소켓 프로그램의 속도 향상(모든 데이터 구조의 잠금을 개별적으로 취득하거나 해제할 필요가 없음),
  • 일반적으로 스레드 세이프가 아닌 C 라이브러리를 쉽게 통합합니다.
  • 구현의 용이성(잠금 없는 인터프리터나 세밀한 잠금을 사용하는 인터프리터보다 단일 GIL을 사용하는 것이 훨씬 구현이 간단함).

GIL을 회피하는 방법은 스레드당 개별 인터프리터를 작성하는 것입니다.대부분의 언어에서는 비용이 너무 많이 듭니다.

결점

언어로 글로벌 인터프리터 잠금을 사용하면 여러 스레드를 가진 단일 인터프리터 프로세스의 동시성을 통해 도달 가능한 병렬화의 양을 효과적으로 제한할 수 있습니다.프로세스가 거의 순수하게 해석된 코드로 구성되어 있으며 인터프리터 외부에서 장시간 차단 콜을 발신하지 않는 경우(처리 중에 해당 스레드에 의해 GIL이 해방될 수 있음), 멀티프로세서머신에서 프로세스를 실행할 때 속도가 거의 향상되지 않을 수 있습니다.CPU 바인딩 스레드를 사용한 시그널링으로 인해 단일 프로세서에서도 상당한 [2]속도 저하가 발생할 수 있습니다.더 심각한 것은 단일 네이티브 스레드가 차단 OS 프로세스(디스크 액세스 등)를 호출하면 다른 응용 프로그램 스레드가 대기 중인 경우에도 프로세스 전체가 차단됩니다.

글로벌 인터프리터 잠금을 구현하는 언어 구현으로는 [3][4]Python의 가장 널리 사용되는 구현CPython과 Ruby의 참조 구현Ruby MRI(Global VM Lock)가 있습니다.

이들 언어의 JVM 기반 동등 언어(JythonJRuby)는 글로벌인터프리터 잠금을 사용하지 않습니다.IronPythonIronRubyMicrosoft의 Dynamic Language Runtime 에 구현되어 [5]GIL을 사용하지 않습니다.

GIL이 없는 인터프리터 언어의 예로는 벤치마킹툴 HammerDB에서 사용되는 [6]Tcl이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "GlobalInterpreterLock". Retrieved 30 November 2015.
  2. ^ David Beazley (2009-06-11). "Inside the Python GIL" (PDF). Chicago: Chicago Python User Group. Retrieved 2009-10-07.
  3. ^ Shannon -jj Behrens (2008-02-03). "Concurrency and Python". Dr. Dobb's Journal. p. 2. Retrieved 2008-07-12. The GIL is a lock that is used to protect all the critical sections in Python. Hence, even if you have multiple CPUs, only one thread may be doing "pythony" things at a time.
  4. ^ "Python/C API Reference Manual: Thread State and the Global Interpreter Lock". Archived from the original on 2008-09-14. Retrieved 2014-08-15.
  5. ^ "IronPython at python.org". python.org. Retrieved 2011-04-04. IronPython has no GIL and multi-threaded code can use multi core processors.
  6. ^ "HammerDB Concepts and Architecture". HammerDB. 2018-11-30. Retrieved 2020-05-10. It is important to understand at the outset that HammerDB is written in TCL because of the unique threading capabilities that TCL brings.