Python内部是如何存储GC引用变量的计数的?
PHP中文网
PHP中文网 2017-04-18 10:08:49
0
1
496
PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(1)
左手右手慢动作

이해하기가 더 쉽습니다. GIL은 Python 바이트 코드가 동시에 프로세스에서
실행되는 하나의 기본 스레드만 갖도록 합니다. 그러나 바이트 코드 자체의 논리에는 스레드가 재진입할 수 있는지 확인하기 위해 여전히 잠금/상호 배제 등이 필요합니다. 왜냐하면 바이트 코드는 실행 프로세스 중 어느 시점에서든 중단되고 다른 스레드로 전환될 수 있기 때문입니다.

간단한 예:

카운터 코드 조각:
// 1단계
counter = get_counter()
// 2단계
counter += 1
/ / 3단계
set_counter(카운터)

초기 카운터가 0이고 두 스레드가 동기화 없이 동시에 이 Python 코드를 실행한다고 가정합니다.

예상 결과는 두 스레드가 모두 계산되어야 하며 최종 카운터는 2여야 합니다.

단, 잠금 없음/상호 배제로 인해 실행 상황은 다음과 같습니다.

  1. 스레드 A가 1단계 실행을 마치면 카운터는 0이 되며, 이는 스레드 B로 전환한다는 의미입니다.

  2. 스레드 B가 1,2,3단계를 성공적으로 실행했습니다. 이제 카운터는 1이고 A로 전환됩니다.

  3. 스레드 A는 2단계를 계속 실행하여 카운터를 1로 설정하고, 3단계에서는 카운터를 1로 설정합니다.

최종 결과는 1입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!