asyncio-Leistung in Python ohne GIL (Free-Threaded Python) skalieren
(labs.quansight.org)Fazit
Im free-threaded Build von Python 3.14 ermöglicht asyncio durch die Entfernung des Global Interpreter Lock (GIL) und den Wechsel zu threadlokaler Zustandsverwaltung eine echte parallele Ausführung. Dadurch skaliert die Leistung linear mit der Anzahl der Threads, sodass mehrere Event Loops parallel ausgeführt werden können und sich neue Möglichkeiten für hochperformante multithreaded asyncio-Anwendungen eröffnen.
Wichtige Änderungen
- Entfernung des GIL (Global Interpreter Lock): Der free-threaded Build von CPython entfernt den GIL, sodass mehrere Threads gleichzeitig Python-Code ausführen können.
- Sicherstellung der Thread-Sicherheit: asyncio verwendet zur Gewährleistung der Thread-Sicherheit threadlokale Zustandsverwaltung anstelle globaler Datenstrukturen.
- Task-Speicherung: Anstelle eines globalen
WeakSetwird eine threadlokale zirkuläre doppelt verkettete Liste verwendet, wodurch Lock-Contention und der Overhead schwacher Referenzen entfallen. - Speicherung des aktuellen Tasks: Der „aktuelle Task“ wird im Thread-Zustand gespeichert, was einen schnelleren und lockfreien Zugriff ermöglicht.
- Task-Speicherung: Anstelle eines globalen
Leistungsverbesserungen
- Lineare Leistungsskalierung: Benchmarks zeigen, dass sich die asyncio-Leistung im free-threaded Build mit steigender Thread-Anzahl linear verbessert.
- TCP-Benchmark: Im Vergleich zu Builds mit aktiviertem GIL wurde im free-threaded Build ein deutlich höherer Durchsatz erzielt.
- Web-Scraping-Benchmark: In einem Web-Scraping-Benchmark mit
aiohttpwurde bei Verwendung mehrerer Worker im free-threaded Build eine mehr als doppelt so hohe Leistung erreicht.
Noch keine Kommentare.