Stackless Python
Stackless Python software | |
---|---|
Genere | |
Ultima versione | 3.8.1-slp (12 agosto 2021) |
Sistema operativo | |
Linguaggio | C Python |
Licenza | Python Software Foundation License (licenza libera) |
Sito web | github.com/stackless-dev/stackless/wiki |
Stackless Python, o Stackless, è una variante dell'interprete Python che offre un approccio innovativo alla gestione dello stack. Stackless utilizza un proprio meccanismo di gestione dello stack, indipendente dallo stack C sottostante. Questo permette di creare un numero praticamente illimitato di microthread senza preoccuparsi di esaurire lo stack. [1]
Stackless, inoltre, supporta le coroutine e i canali. Le prime sono una forma di multitasking cooperativo che consente a diversi task di condividere lo stesso thread. I canali, invece, forniscono un meccanismo di comunicazione tra microthread ispirato ai CSP (Communicating Sequential Processes) permettendo di scambiare dati tra diversi task in modo sicuro e sincronizzato.
Progetto
Con Stackless Python, un programma in esecuzione viene suddiviso in microthread gestiti dall'interprete del linguaggio stesso e non dal kernel del sistema operativo. A differenza dei thread tradizionali del sistema operativo, i microthread, sono molto più leggeri e richiedono meno risorse per essere creati e gestiti. Questi microthread simulano una sorta di multitasking interno a un singolo processo, senza dover ricorrere ai costosi context switch del sistema operativo.
I microthread offrono un modo efficiente per gestire l'esecuzione concorrente di diverse sotto-attività all'interno di un singolo processo, sfruttando un singolo core della CPU. Pertanto, rappresentano un'alternativa alla programmazione asincrona basata sugli eventi ed evitano il sovraccarico dovuto all'utilizzo di thread separati per programmi single-core (in quanto non è necessario effettuare alcun passaggio di modalità tra la modalità utente e quella kernel, riducendo in questo modo l'utilizzo della CPU).
Stackless Python, pur facilitando la gestione di microthread su un singolo core, non risolve il problema del Global Interpreter Lock (GIL) di CPython. Quindi anche se Stackless Python permette di creare molti microthread, questi possono comunque essere eseguiti solo uno alla volta su un singolo core della CPU. In tal senso il parallelismo risulta limitato (la preemption non era disponibile in Stackless mentre ora è stata introdotta una forma di preemption limitata). [2]
A causa delle considerevoli modifiche al core di Python, Stackless Python non può essere integrato come una semplice libreria in un'installazione esistente. Richiede invece un'installazione completa e indipendente.
La maggior parte delle funzionalità di Stackless sono state implementate anche in PyPy, un interprete Python che agisce anche come compilatore Just-In-Time (JIT). [3]
Utilizzo
Sebbene l'intero Stackless sia una distribuzione separata, la sua funzionalità di commutazione è stata confezionata con successo come un'estensione CPython chiamata greenlet. [4] Viene utilizzato da numerose librerie (ad esempio gevent [5] ) per fornire una soluzione di threading ecologica per CPython. Python ha ricevuto una soluzione nativa per i thread verdi: await /async.
Stackless è ampiamente utilizzato nell'implementazione del gioco online multigiocatore di massa Eve Online e nella piattaforma di posta elettronica IronPort .
Voci correlate
Note
- ^ Archived at Ghostarchive and the Wayback Machine:
https://www.youtube.com/watch?v=pDkrkP0yf70.
- ^ bitbucket.org, https://bitbucket.org/stackless-dev/stackless/wiki/Home .«a round robin scheduler is built in. It can be used to schedule tasklets either cooperatively or preemptively.»
- ^ pypy.readthedocs.org, https://pypy.readthedocs.org/en/latest/stackless.html .
- ^ greenlet.readthedocs.org, https://greenlet.readthedocs.org/en/latest/ .
- ^ www.gevent.org, https://www.gevent.org .
Collegamenti esterni
- Sito ufficiale, su github.com.
- Stackless Python Documentation for: 3.7-slp, 3.6-slp, 3.5-slp, 3.4-slp, 2.7-slp
- (EN) Stackless Python, su GitHub.
- Multithreaded Game Scripting with Stackless Python by Harry Kalogirou
- Continuations and Stackless Python by Christian Tismer
[[Categoria:Programmazione concorrente]]