메모리 관리와 같은 복잡한 경쟁 위험 문제(경합 조건)를 피하기 위해
CPython은 수많은 C 언어 라이브러리를 사용하지만 대부분의 C 언어 라이브러리는 기본 스레드로부터 안전하지 않기 때문입니다(Thread 안전은 성능을 저하시키고 복잡성을 증가시킵니다)
여러 스레드가 실행될 때 각 스레드는 실행을 시작할 때 다른 스레드가 실행되는 것을 방지하기 위해 GIL을 잠급니다. 마찬가지로 각 스레드가 실행 기간을 완료한 후입니다. , 다른 스레드가 리소스를 사용하여 시작할 수 있도록 GIL이 해제됩니다. CPython 인터프리터는 일정 시간이 지나면 매번 스레드 GIL의 잠금 상태를 폴링하고 확인합니다. 현재 스레드가 강제로 GIL을 해제하여 다른 스레드가 실행할 기회를 가질 수 있도록 합니다
for (;;) { if (--ticker < 0) { ticker = check_interval; /* Give another thread a chance */ PyThread_release_lock(interpreter_lock); /* Other threads may run now */ PyThread_acquire_lock(interpreter_lock, 1); } bytecode = *next_instr++; switch (bytecode) { /* execute the next instruction ... */ } }
3.Python의 스레드 안전성
4. 우회 방법 길?
5. 멀티스레딩이 때로는 싱글스레딩보다 느릴 때도 있나요?
실제로 Python 3 이후 GIL의 개선이나 폐지에 대한 논의가 많이 있습니다. 일상 업무에서 GIL로 인해 고민을 하신 적이 있나요?
위 내용은 Python의 GIL 전역 인터프리터 잠금 구현 방법 및 원리 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!