2009-12-16 2 views
11

Je viens de voir this section of Unladen Swallow's documentation apparaître sur Hacker News. Fondamentalement, ce sont les ingénieurs de Google qui disent qu'ils ne sont pas optimistes quant à la suppression du GIL. Cependant, il semble qu'il y ait une discussion sur le collecteur d'ordures intercalé avec cette discussion sur le GIL. Quelqu'un pourrait-il m'expliquer la relation avec moi?Qu'est-ce que le GIL de Python a à voir avec le garbage collector?

+2

Eh bien, lisez sur le GIL. http://wiki.python.org/moin/GlobalInterpreterLock Comme vous pouvez le voir, tout est une question de gestion de la mémoire. –

Répondre

17

La version très courte est actuellement python gère la mémoire avec un comptage de référence + une marque & schéma de cycle de balayage, optimisé pour la latence (au lieu du débit). Ceci est très bien quand il n'y a qu'un seul thread de mutation, mais dans un système multi-thread, vous devez synchroniser toutes les fois que vous modifiez refcounts, ou vous pouvez avoir des valeurs "tomber dans les fissures", et les primitives de synchronisation sont assez coûteuses sur le matériel contemporain. Si les refcounts n'ont pas été changés si souvent, cela ne poserait pas de problème, mais à peu près toutes les opérations que vous effectuez dans cpython peuvent provoquer un changement de refonte quelque part, donc les options sont soit GIL, soit refcounts avec type de synchronisation (et littéralement passer presque tout votre temps sur la synchronisation), ou fossé le système de refcounting pour un genre de vrai garbage collector.

1

La réponse de Tuna-Fish couvre essentiellement. Si vous voulez plus de détails, il y a eu une discussion sur la façon dont le GIL pourrait être retirée sans avoir trop beaucoup d'effet sur le comptage de références ici: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html

+0

La suggestion dans ce lien était naïve. L'utilisation de compare-and-swap pour le comptage des références est trop lente. –