>  Q&A  >  본문

Python内部是如何存储GC引用变量的计数的?

PHP中文网PHP中文网2741일 전505

모든 응답(1)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 10:10:49

    이해하기가 더 쉽습니다. 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입니다.

    회신하다
    0
  • 취소회신하다