Ich sah gerade this section of Unladen Swallow's documentation auf Hacker News kommen. Im Grunde sagen die Google-Ingenieure, dass sie nicht optimistisch sind, die GIL zu entfernen. Es scheint jedoch, als gäbe es Diskussionen über den Müllsammler, der mit dieser Rede über die GIL durchsetzt ist. Kann mir jemand die Beziehung zu mir erklären?Was hat Pythons GIL mit dem Garbage Collector zu tun?
Antwort
Die wirklich kurze Version ist, dass derzeit Python verwaltet Speicher mit einer Referenzzählung & Sweep Cycle-Kollektor-Schema, optimiert für die Latenz (anstelle des Durchsatzes).
Das ist alles in Ordnung, wenn es nur einen einzigen mutierenden Thread gibt, aber in einem Multi-Threaded-System müssen Sie alle Zeiten, die Sie Refcounts ändern, synchronisieren, sonst können Sie Werte "durch die Risse fallen" und Synchronisationsgrundelemente sind auf der heutigen Hardware ziemlich teuer.
Wenn Refcounts nicht so oft geändert werden, wäre das kein Problem, aber bei jeder einzelnen Operation in cpython kann sich ein refcount irgendwo ändern, also sind die Optionen entweder GIL, refocatings mit einigen Art der Synchronisation (und buchstäblich verbringen fast Ihre gesamte Zeit auf der Synchronisation), oder Graben Sie das Refcounting-System für eine Art von einem echten Müllsammler.
Die Antwort von Tuna-Fish deckt sie im Wesentlichen ab. Wenn Sie weitere Informationen wünschen, gab es eine Diskussion darüber, wie könnte die GIL ohne mit zu zählt hier auf der Referenz viel einen Effektes entfernt werden: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html
Der Vorschlag in diesem Link war naiv. Compare-and-Swap für Referenzzählung ist zu langsam. –
Ich habe gerade eine anderen Standpunkt zu diesem Thema hier: http://renesd.blogspot.com/2009/12/python-gil-unladen-swallow-reference.html
Nun, lesen Sie über die GIL. http://wiki.python.org/moin/GlobalInterpreterLock Wie Sie sehen, dreht sich alles um die Speicherverwaltung. –