1 Punkte von GN⁺ 2024-03-12 | Noch keine Kommentare. | Auf WhatsApp teilen

Deaktivierung des GIL ermöglichen

  • Durch Setzen von PYTHON_GIL=0 oder -X gil=0 kann der GIL (Global Interpreter Lock) deaktiviert werden.
  • Die mit dem GIL verbundenen Datenstrukturen werden initialisiert, aber bei deaktiviertem GIL kehren take_gil() und drop_gil() vorzeitig zurück.
  • Es wurden einige Tests und kleine Programme mit deaktiviertem GIL ausgeführt, und einfache Thread-Programme funktionieren gelegentlich ebenfalls.
  • Beim Versuch, die komplette Test-Suite auszuführen, tritt schnell ein Absturz in test_asyncio auf.

Mechanismus zur GIL-Deaktivierung hinzugefügt

  • Es gab Diskussionen zu dem Issue (#116167), das einen Mechanismus zur Deaktivierung des GIL hinzufügt.
  • In Free-Threaded-Builds wurde eine Funktion hinzugefügt, mit der sich der GIL deaktivieren lässt.
  • Verfolgt werden Arbeiten zur erneuten Aktivierung des GIL (#116322) sowie zur standardmäßigen Deaktivierung des GIL (#116329).

Code-Review und Tests

  • Es gab Diskussionen über die Bitte um Code-Review und das Hinzufügen von Testfällen.
  • Vorgeschlagen wurden eine Dokumentation der Umgebungsvariablen PYTHON_GIL sowie das Einholen von Nutzerfeedback.
  • Enthalten sind das Hinzufügen der Option -X gil, deren Abbildung in sys.flags sowie Anpassungen an Tests, die Umgebungsvariablen behandeln.

Meinung von GN⁺

  • Diese Änderung könnte große Auswirkungen auf die Python-Community haben, da der GIL ein bekannter Faktor ist, der die Multithreading-Performance von Python einschränkt.
  • Die Möglichkeit, den GIL zu deaktivieren, kann Leistungsverbesserungen bringen, zugleich aber auch Stabilitäts- und Kompatibilitätsprobleme verursachen, sodass ein vorsichtiger Ansatz nötig ist.
  • Python ohne GIL auszuführen kann insbesondere bei Aufgaben rund um Parallelverarbeitung Vorteile bieten, allerdings wurde viel bestehender Python-Code unter der Annahme des GIL geschrieben, weshalb es wichtig ist, die Auswirkungen dieser Änderung sorgfältig zu bewerten.
  • In anderen Sprachen oder Laufzeitumgebungen werden oft keine dem GIL ähnlichen Mechanismen verwendet; Node.js verfolgt zum Beispiel einen Ansatz, der die Single-Thread-Performance über asynchrones I/O maximiert.
  • Bei der Einführung dieser Technik sollten die Thread-Sicherheit bestehenden Codes geprüft und bei Bedarf Refactorings in Betracht gezogen werden. Wichtig ist, die Balance zwischen den Leistungsgewinnen durch die Deaktivierung des GIL und der Stabilität gut auszutarieren.

Noch keine Kommentare.

Noch keine Kommentare.