Laut Release-Plan wird Python 3.11.0 am 24. Oktober 2022 veröffentlicht.
Tests zufolge wird 3.11 eine Leistungsverbesserung von 10–60 % im Vergleich zu 3.10 aufweisen. Diese Leistung wird hauptsächlich dem „Faster CPython“-Projekt zugeschrieben, das auch als „Shannon-Projekt“ bekannt ist.
Version 3.11 ist ein aufregender Start für die Beschleunigung von Python. Als nächstes kommt in 3.12 mehr Action.
Der folgende Artikel wurde aus „Python 3.12 Goals“ von „Shannon Project“ übersetzt, werfen wir zuerst einen Blick darauf!
Der Inhalt dieses Artikels Änderungen vorbehalten, die aktuelle Version ist maßgebend!
Dieser Artikel ist eine Zusammenfassung der Hauptinhalte, die Faster CPython in 3.12 implementieren möchte.
Die wichtigste Möglichkeit, die Geschwindigkeit in Python 3.11 zu verbessern, besteht darin, einzelne Opcodes durch schnellere kontextsensitive Opcodes (adaptive Spezialisierungs-Opcodes) zu ersetzen. Die nächste große Verbesserung besteht darin, mehrere Operationen des Opcodes zu optimieren.
Zu diesem Zweck werden viele der vorhandenen High-Level-Opcodes durch Low-Level-Opcodes ersetzt, wie sie beispielsweise zur Überprüfung von Versionsnummern und Referenzzahlen verwendet werden. Diese einfacheren Opcodes lassen sich leichter optimieren, beispielsweise können redundante Referenzzählvorgänge entfernt werden.
Diese Opcodes auf niedrigerer Ebene geben uns auch eine Reihe von Anweisungen, die zum Generieren von Maschinencode geeignet sind (sowohl in CPython- als auch in JIT-Projekten von Drittanbietern).
Dazu wird eine Interpreterschleife basierend auf der deklarativen Beschreibung generiert.
Dies kann einige Fehler reduzieren, die dadurch entstehen, dass die Interpreterschleife mit bestimmten verwandten Funktionen (mark_stacks, stack_effect usw.) synchronisiert bleibt, und ermöglicht es uns auch, mit größeren Änderungen an der Interpreterschleife zu experimentieren.
Python verfügt derzeit über eine globale Interpretersperre (GIL) pro Prozess, die Multithread-Parallelität behindert.
PEP-684 schlug einen vor Die Lösung besteht darin, sicherzustellen, dass der gesamte globale Status threadsicher ist und in die globale Interpretersperre jedes Unterinterpreters verschoben wird.
PEP-554 schlägt eine Lösung für Python vor, um Unterinterpreter zu erstellen (derzeit nur eine C-API-Funktion) und so echte Multithread-Parallelität zu erreichen.
Wir haben analysiert, welche Bytecodes am meisten von der Spezialisierung profitieren werden, und planen, die verbleibenden ertragsstarken Verbesserungen in 3.12 abzuschließen.
https://www.php.cn/link/7392ea4ca76ad2fb4c9c3b6a5c6e31e3
Es gibt viele Möglichkeiten, die Größe von Python-Objektstrukturen zu reduzieren. Da sie häufig verwendet werden, kommt dies nicht nur der Gesamtspeichernutzung zugute, sondern auch der Cache-Konsistenz. Wir planen, einige der vielversprechendsten Ideen in 3.12 umzusetzen.
Es gibt einige Kompromisse zwischen Abwärtskompatibilität und Leistung, und möglicherweise muss ein PEP vorgeschlagen werden, um einen Konsens zu erzielen.
Wir werden nicht nur die Größe von Objekten reduzieren, sondern auch ihr Layout regelmäßiger gestalten.
Dies optimiert nicht nur die Speicherzuweisung und -freigabe, sondern beschleunigt auch die Objektdurchquerung während der GC und Neuzuweisung.
Zusätzlich zu den oben genannten Projekten wird das Entwicklungsteam auch die Gesamtqualität der CPython-Codebasis verbessern:
Das obige ist der detaillierte Inhalt vonDas Ziel von Python 3.12: effizientere Leistung!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!