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

认证高级PHP讲师

répondre à tous(1)
左手右手慢动作

C'est plus facile à comprendre. GIL garantit que le code d'octet python n'a qu'un seul thread natif exécuté
dans le processus en même temps. Cependant, la logique du byte code lui-même nécessite toujours un verrouillage/exclusion mutuelle, etc. pour garantir que le thread peut être réentrant, car le byte code peut être interrompu à tout moment pendant le processus en cours et basculé vers un autre thread.

Un exemple simple :

Un morceau de code de compteur :
//Étape 1
counter = get_counter()
//Étape 2
counter += 1
/ / Étape 3
set_counter(counter)

Supposons que le compteur initial soit 0 et que deux threads exécutent ce code Python en même temps sans aucune synchronisation

Le résultat attendu devrait être que les deux threads ont compté et le compteur final devrait être 2 :
Cependant, faute de verrouillage/exclusion mutuelle, la situation d'exécution est la suivante :

    Lorsque le thread A termine l'exécution de l'étape 1, le compteur est à 0, ce qui signifie passer au thread B
  1. Le thread B a exécuté avec succès les étapes 1,2,3. Le compteur est maintenant à 1, puis passe à A
  2. .

  3. Le fil A continue d'exécuter l'étape 2 et obtient le compteur à 1, puis l'étape 3 définit le compteur à 1.
  4. Le résultat final est 1.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!