Stapelloses Python - Stackless Python

Stapelloses Python
Ursprüngliche Autor (en) Christian Tismer
Entwickler Anselm Kruis
Erstveröffentlichung 1998 ; Vor 23 Jahren  ( 1998 )
Stabile Version
3,7,5-slp, 3,6,9-slp, 2,7,17-slp / 22. Januar 2020 ; Vor 15 Monaten  ( 22.01.2020 )
Vorschau Release
3.8.0b3
Repository Bearbeiten Sie dies bei Wikidata
Geschrieben in C , Python
Betriebssystem Linux , Windows
Art Dolmetscher
Lizenz Python Software Foundation-Lizenz
Webseite http://www.stackless.com

Stackless Python oder Stackless ist ein Python-Programmierspracheninterpreter , der so genannt wird, weil er es vermeidet, vom C- Aufrufstapel für seinen eigenen Stapel abhängig zu sein. In der Praxis verwendet Stackless Python den C-Stack, der Stack wird jedoch zwischen Funktionsaufrufen gelöscht. Das herausragendste Merkmal von Stackless sind Mikrothreads , die einen Großteil des mit üblichen Betriebssystem- Threads verbundenen Overheads vermeiden . Neben Python - Funktionen, fügt Stackless auch Unterstützung für Koroutinen , Kommunikationskanäle und Aufgaben Serialisierung .

Design

Mit Stackless Python, ist ein laufendes Programm Aufspaltung in Mikrogewinde , die durch den Sprachinterpreter selbst verwaltet werden, nicht die Betriebssystem - Kernel - Kontextumschaltung und Aufgabenplanung ist lediglich im Interpreter erfolgen (diese sind somit auch als eine Form des angesehen grünen Fadens ) . Microthreads verwalten die Ausführung verschiedener Unteraufgaben in einem Programm auf demselben CPU-Kern. Sie sind daher eine Alternative zur ereignisbasierten asynchronen Programmierung und vermeiden den Aufwand für die Verwendung separater Threads für Single-Core-Programme (da kein Moduswechsel zwischen Benutzermodus und Kernelmodus erforderlich ist, sodass die CPU-Auslastung reduziert werden kann).

Obwohl Mikrothreads die Ausführung von Unteraufgaben auf einem einzelnen Kern vereinfachen, entfernt Stackless Python weder die globale Interpreter-Sperre von CPython noch verwendet es mehrere Threads und / oder Prozesse. Es erlaubt also nur kooperatives Multitasking auf einer gemeinsam genutzten CPU und keine Parallelität (Preemption war ursprünglich nicht verfügbar, ist aber jetzt in irgendeiner Form). Um mehrere CPU-Kerne zu verwenden, müsste noch ein Interprozess-Kommunikationssystem auf stapellosen Python-Prozessen aufgebaut werden.

Aufgrund der beträchtlichen Anzahl von Änderungen in der Quelle kann Stackless Python nicht auf einer bereits vorhandenen Python-Installation als Erweiterung oder Bibliothek installiert werden . Es ist stattdessen eine vollständige Python-Distribution für sich. Die meisten Funktionen von Stackless wurden auch in PyPy implementiert , einem selbsthostenden Python-Interpreter und JIT-Compiler .

Benutzen

Obwohl das gesamte Stackless eine separate Distribution ist, wurde seine Switching-Funktionalität erfolgreich als CPython- Erweiterung namens Greenlet verpackt . Es wird von einer Reihe von Bibliotheken (z. B. gevent) verwendet, um eine Green-Threading- Lösung für CPython bereitzustellen . Python hat seitdem eine native Lösung für grüne Threads erhalten: await / async.

Stackless wird in großem Umfang bei der Implementierung des Massive Multiplayer-Online-Spiels Eve Online sowie in der Mail-Plattform von IronPort verwendet .

Siehe auch

Verweise

Externe Links