Python bez stosu - Stackless Python

Python bez stosu
Pierwotni autorzy Christian Tismer
Deweloper (y) Anselm Kruis
Pierwsze wydanie 1998 ; 23 lata temu  ( 1998 )
Wersja stabilna
3.7.5-slp, 3.6.9-slp, 2.7.17-slp / 22 stycznia 2020 ; 15 miesięcy temu  ( 2020-01-22 )
Wersja zapoznawcza
3.8.0b3
Magazyn Edytuj to w Wikidata
Napisane w C , Python
System operacyjny Linux , Windows
Rodzaj Interpretator
Licencja Licencja Python Software Foundation
Stronie internetowej http://www.stackless.com

Stackless Python lub Stackless to interpreter języka programowania Python , nazwany tak, ponieważ unika zależności od stosu wywołań C dla własnego stosu. W praktyce Python bez stosu używa stosu C, ale stos jest czyszczony między wywołaniami funkcji. Najbardziej widoczną cechą Stackless są mikrowątki , które pozwalają uniknąć większości narzutów związanych ze zwykłymi wątkami systemu operacyjnego . Oprócz funkcji Pythona, Stackless dodaje również obsługę programów roboczych , kanałów komunikacyjnych i serializacji zadań .

Projekt

W przypadku Stackless Python uruchomiony program jest dzielony na mikrowątki, którymi zarządza sam interpreter języka, a nie jądro systemu operacyjnego - przełączanie kontekstu i planowanie zadań odbywa się wyłącznie w interprecie (są one zatem również traktowane jako forma zielonego wątku ) . Mikrowątki zarządzają wykonywaniem różnych podzadań w programie na tym samym rdzeniu procesora. W związku z tym są alternatywą dla programowania asynchronicznego opartego na zdarzeniach, a także pozwalają uniknąć narzutu związanego z używaniem oddzielnych wątków dla programów jednordzeniowych (ponieważ nie ma potrzeby przełączania trybu między trybem użytkownika a trybem jądra, więc można zmniejszyć użycie procesora).

Chociaż mikrowątki ułatwiają wykonywanie podzadań na jednym rdzeniu, Python bez stosu nie usuwa globalnej blokady interpretera CPythona ani nie używa wielu wątków i / lub procesów. Pozwala więc tylko na współpracę wielozadaniową na współużytkowanym procesorze, a nie na równoległość (wywłaszczanie nie było pierwotnie dostępne, ale jest teraz w jakiejś formie). Aby używać wielu rdzeni procesora, należałoby nadal zbudować system komunikacji międzyprocesowej na bazie procesów Stackless Python.

Ze względu na znaczną liczbę zmian w źródle, Stackless Python nie może być zainstalowany na wcześniejszej instalacji Pythona jako rozszerzenie lub biblioteka . Zamiast tego jest to kompletna dystrybucja Pythona sama w sobie. Większość funkcji Stackless została również zaimplementowana w PyPy , samodzielnym interpreterze Pythona i kompilatorze JIT .

Posługiwać się

Chociaż cały Stackless jest oddzielną dystrybucją, jego funkcjonalność przełączania została pomyślnie spakowana jako rozszerzenie CPython o nazwie greenlet. Jest używany przez wiele bibliotek (np. Gevent) w celu zapewnienia zielonego rozwiązania wątkowego dla CPythona. Od tego czasu Python otrzymał natywne rozwiązanie dla zielonych wątków: await / async.

Stackless jest szeroko stosowany przy implementacji gry online dla wielu graczy Eve Online, a także w platformie pocztowej IronPort .

Zobacz też

Bibliografia

Linki zewnętrzne