Heim  >  Artikel  >  Backend-Entwicklung  >  Das Ziel von Python 3.12: effizientere Leistung!

Das Ziel von Python 3.12: effizientere Leistung!

王林
王林nach vorne
2023-04-22 14:43:091620Durchsuche

Python 3.12 目标:还可以更快!

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!

  • Autor: Mark Shannon
  • Übersetzer: Pea Flower Cat @Python Cat
  • Englisch: https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals

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.

Tracking Optimizer

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.

Multithread-Parallelität

Python verfügt derzeit über eine globale Interpretersperre (GIL) pro Prozess, die Multithread-Parallelität behindert.

  • PEP-684: https://peps.python.org/pep-0684
  • PEP-554: https://peps.python.org/pep-0554

Python 3.12 目标:还可以更快!

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.

Python 3.12 目标:还可以更快!


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.

  • Python Cat Hinweis: PEP-554 wurde bereits 2017 mit dem Ziel vorgeschlagen, auf den Python-Versionen 3.8–3.9 zu landen, aber es ging nach hinten los. Bereits 2019 habe ich auch einen Artikel „Wurde die Python-GIL getötet?“ übersetzt. Das Metzgermesser wurde geschwungen, lasst es eine Weile fliegen~~

Mehr Spezialisierung

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​

Python 3.12 目标:还可以更快!

Kleinere Objektstrukturen

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.

Python 3.12 目标:还可以更快!

Reduzieren Sie den Speicherverwaltungsaufwand

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.

API-Stabilität

Zusätzlich zu den oben genannten Projekten wird das Entwicklungsteam auch die Gesamtqualität der CPython-Codebasis verbessern:

  • Durch die Reduzierung der Kopplung verschiedener Kompilierungsstufen ist der Compiler einfacher zu warten und zu testen.
  • Überwachen und verbessern Sie aktiv die Codeabdeckung von CPython-Testsuiten auf der C-Sprachebene.
  • Verbesserte Python-Leistungs-Benchmark-Suite, um repräsentativere Lasttests in der Praxis einzuschließen.
  • Unterstützen Sie bei CPython-Problemen und PRs, insbesondere im Zusammenhang mit der Leistung.
  • Maschinen für Standard-Benchmarks hinzugefügt und Testergebnisse für macOS und Windows hinzugefügt.
  • Arbeiten Sie weiterhin mit Großprojekten zusammen, die den Python-Kernel stark nutzen, um sie bei der Anpassung an Änderungen im CPython-Interpreter zu unterstützen.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen