Python bez stosu - Stackless Python
Pierwotni autorzy | Christian Tismer |
---|---|
Deweloper (y) | Anselm Kruis |
Pierwsze wydanie | 1998 |
Wersja stabilna | 3.7.5-slp, 3.6.9-slp, 2.7.17-slp / 22 stycznia 2020
|
Wersja zapoznawcza | 3.8.0b3
|
Magazyn | |
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ż
- Erlang (język programowania)
- Limbo (język programowania)
- Go (język programowania)
- SCOOP (oprogramowanie)
Bibliografia
Linki zewnętrzne
- Oficjalna strona internetowa
- Dokumentacja Stackless Python dla: 3,7-slp , 3,6-slp , 3,5-slp , 3,4-slp , 2,7-slp
- bez stosu na GitHub
- Wielowątkowe skrypty gier za pomocą Stackless Python autorstwa Harry'ego Kalogirou
- Kontynuacje i Stackless Python autorstwa Christiana Tismera