Stackless Python - Stackless Python
| Autor (es) original (is) | Christian Tismer |
|---|---|
| Desenvolvedor (s) | Anselm Kruis |
| lançamento inicial | 1998 |
| Versão estável | 3.7.5-slp, 3.6.9-slp, 2.7.17-slp / 22 de janeiro de 2020
|
| Versão de visualização | 3.8.0b3
|
| Repositório |
|
| Escrito em | C , Python |
| Sistema operacional | Linux , Windows |
| Modelo | Intérprete |
| Licença | Licença Python Software Foundation |
| Local na rede Internet | http://www.stackless.com |
Stackless Python , ou Stackless , é um interpretador da linguagem de programação Python , assim chamado porque evita depender da pilha de chamadas C para sua própria pilha. Na prática, Stackless Python usa a pilha C, mas a pilha é limpa entre as chamadas de função. A característica mais proeminente de Stackless é microroscas , que evitam grande parte da sobrecarga associada habituais do sistema operacional tópicos . Além dos recursos do Python, Stackless também adiciona suporte para corrotinas , canais de comunicação e serialização de tarefas .
Projeto
Com Stackless Python, um programa em execução é dividido em microencadeados que são gerenciados pelo próprio intérprete da linguagem, não pelo kernel do sistema operacional - a troca de contexto e o agendamento de tarefas são feitos puramente no intérprete (portanto, também são considerados uma forma de fio verde ) . Microthreads gerenciam a execução de diferentes subtarefas em um programa no mesmo núcleo da CPU. Portanto, eles são uma alternativa à programação assíncrona baseada em eventos e também evitam a sobrecarga de usar threads separados para programas de núcleo único (porque nenhuma alternância de modo entre o modo de usuário e o modo kernel precisa ser feita, então o uso da CPU pode ser reduzido).
Embora os microthreads tornem mais fácil lidar com a execução de subtarefas em um único núcleo, o Stackless Python não remove o Global Interpreter Lock do CPython , nem usa vários threads e / ou processos. Portanto, ele permite apenas multitarefa cooperativa em uma CPU compartilhada e não paralelismo (a preempção não estava originalmente disponível, mas agora está em alguma forma). Para usar vários núcleos de CPU, ainda seria necessário construir um sistema de comunicação entre processos no topo dos processos Stackless Python.
Devido ao número considerável de mudanças na fonte, Stackless Python não pode ser instalado em uma instalação Python preexistente como uma extensão ou biblioteca . Em vez disso, é uma distribuição Python completa em si. A maioria dos recursos do Stackless também foi implementada no PyPy , um interpretador Python auto-hospedado e compilador JIT .
Usar
Embora todo o Stackless seja uma distribuição separada, sua funcionalidade de comutação foi empacotada com sucesso como uma extensão CPython chamada greenlet. É usado por uma série de bibliotecas (por exemplo, gevent) para fornecer uma solução green threading para CPython. Desde então, o Python recebeu uma solução nativa para threads verdes: await / async.
Stackless é amplamente utilizado na implementação do jogo online multiplayer massivo Eve Online , bem como na plataforma de correio da IronPort .
Veja também
- Erlang (linguagem de programação)
- Limbo (linguagem de programação)
- Go (linguagem de programação)
- SCOOP (software)
Referências
links externos
-
Website oficial
- Documentação Stackless do Python para: 3.7-slp , 3.6-slp , 3.5-slp , 3.4-slp , 2.7-slp
- sem pilha no GitHub
- Script de jogo multithreaded com Stackless Python de Harry Kalogirou
- Continuations and Stackless Python por Christian Tismer