uma thread execute o bytecode Python por vez." "Isso simplifica a implementação da CPython por tornar o modelo de objetos implicitamente seguro contra acessos concorrentes. "[...] O GIL é sempre liberado quando ocorrem operações de I/O." Glossário: Termo Global Interpreter Lock Documentação oficial do Python 3
memória da aplicação. • Permite trabalhar com paralelismo e/ou concorrência. • Pouco pra médio overhead. • Excelente para operações de I/O. Contras • GIL (o mesmo da main thread). • Race conditions. • Não é efetivo para operações de CPU bound. • Adiciona uma camada de complexidade na aplicação (para testar, gerenciar, monitorar, etc).
paralelismo. • Sem GIL (cada processo possui o seu). • Excelente para operações de CPU bound. Contras: • Overhead muito alto. • Não compartilha o mesmo espaço de memória da aplicação. • Serialização do contexto usando pickle no momento do fork do processo. • Adiciona uma camada de complexidade (maior do que threads) na aplicação (para testar, gerenciar, monitorar, etc).
CPU) • Pouco overhead. • Pouca complexidade (programe como se fosse sync [ou quase]) Contras: • Depende de um Event Loop. • Novos idiomas e paradigmas (await, async, yield from, gather, etc). • Não é efetivo para operações de CPU bound (somente I/O). • Hype (abusos).
dependências externas (outras API). • Aplicações web com dependências externas lentas. • Criação e gerenciamento de Workers baseados em socket (e.g. nginx, gunicorn, etc.). • Scripts com múltiplos consumos de I/O (e.g. geração de relatório)