Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python GIL(Global Interpreter Lock)이란 무엇입니까?

<시간/>

이 기사에서는 Python GIL(Global Interpreter Lock)이란 무엇인지 알아봅니다.

이것은 여러 스레드에 대한 Python 인터프리터의 가용성을 동시에 방지하는 잠금 또는 장애입니다. GIL은 Python 3.x에서 오류/문제로 식별됩니다. 또는 다중 스레드 아키텍처에서 다중 스레드를 허용하지 않기 때문에 더 일찍.

왜 도입되었나요?

Python은 자동 가비지 수집 개념을 지원합니다. 개체의 참조 횟수가 0에 도달하는 즉시 메모리가 정리되고 사용할 수 있습니다.

>>> import sys
>>> var = {}
>>> print(sys.getrefcount(ar))
>>> 2
>>> v=var
>>> print(sys.getrefcount(v))
>>> 3

이 경우 참조 횟수가 감소하기 시작하고 동시에 증가하기 시작하면 자동 수집기가 제대로 작동하지 않아 메모리 누수 가능성이 높아집니다.

이 위험을 줄이기 위해 GIL이 파이썬에 도입되었습니다. 전역 잠금을 추가하면 교착 상태로 이어지는 일련의 잠금이 발생하는 각 변수에 잠금을 추가하는 것보다 더 나은 것으로 간주됩니다.

Python GIL(Global Interpreter Lock)이란 무엇입니까?

GIL이 여전히 Python에 존재하는 이유

더 나은 방식으로 처리할 수 있도록 GIL을 개선해야 합니다. 따라서 GIL을 제거하는 대신 GIL의 개념을 개선하기 위해 노력하고 있습니다. python은 c 및 cpython의 기반과 순수하게 연결되어 있으므로 Gil을 직접 제거할 수 없습니다. 해결하는 GIL이 구현하기 어려운 문제를 처리하는 다양한 방법이 있지만 시스템의 처리 및 실행 시간을 단축합니다.

예:

프로세스 P1에 스레드 t1과 t2가 있다고 가정해 보겠습니다. Python 스레드는 기본적으로 기본 운영 체제에 의해 예약됩니다.

t1 실행 중(단계 실행)(GIL 획득) → t1 I/O(입력/출력) 대기(GIL 해제) → t2 실행(단계 실행)(GIL 획득, 이때 t1도 실행할 준비가 되었지만 GIL이 획득됨) by t2)

따라서 여기서 GIL이 주요 제한 사항이 됩니다. 따라서 많은 CPU 바인딩 작업을 수행하는 다중 스레드 Python 응용 프로그램/모듈을 작성하려는 경우 원하는 결과를 얻는 것이 불가능해집니다.

Python에서는 실제 멀티스레딩이 불가능하기 때문에 멀티코어 CPU를 사용할 수 있는 경우에도 프로세스가 한 번에 하나의 CPU만 사용하므로 효율적입니다.

그러나 대부분의 Python 응용 프로그램(웹 응용 프로그램, Django 기반 서버 등)에서는 이러한 응용 프로그램이 본질적으로 I/O 경계이기 때문에 문제로 남아 있지 않습니다.

Python 프로그래머로서 우리는 Python에서 실행 가능한 C/C++ 모듈/스크립트를 작성할 때까지 GIL 획득 및 해제를 처리할 필요가 없습니다.

결론

이 기사에서는 Python 글로벌 인터프리터 잠금, 그 중요성 및 Python에서 직접 제거할 수 없는 이유에 대해 배웠습니다.