Permitir desativar o GIL
- Agora é possível desativar o GIL (Global Interpreter Lock) definindo
PYTHON_GIL=0 ou -X gil=0.
- As estruturas de dados relacionadas ao GIL são inicializadas, mas ao desativá-lo,
take_gil() e drop_gil() passam a retornar antecipadamente.
- Alguns testes e pequenos programas foram executados com o GIL desativado, e programas básicos com threads às vezes também funcionam.
- Ao tentar executar toda a suíte de testes, ocorre uma falha rapidamente em
test_asyncio.
Adição do mecanismo de desativação do GIL
- Houve discussão sobre a issue (#116167) para adicionar o mecanismo de desativação do GIL.
- Foi adicionada a capacidade de desativar o GIL em builds free-threaded.
- Também são acompanhados o trabalho para reativar o GIL (#116322) e o trabalho para desativá-lo por padrão (#116329).
Revisão de código e testes
- Houve discussões sobre pedidos de revisão de código e sobre a adição de casos de teste.
- Também houve propostas para documentar a variável de ambiente
PYTHON_GIL e obter feedback dos usuários.
- Isso inclui a adição da opção
-X gil, seu reflexo em sys.flags e a modificação de testes que lidam com variáveis de ambiente.
Opinião do GN⁺
- Essa mudança pode ter grande impacto na comunidade Python, porque o GIL é um elemento amplamente conhecido por limitar o desempenho de multithreading em Python.
- A capacidade de desativar o GIL pode trazer ganhos de desempenho, mas também pode causar problemas de estabilidade e compatibilidade, exigindo uma abordagem cuidadosa.
- Executar Python sem GIL pode oferecer vantagens especialmente em tarefas relacionadas a processamento paralelo, mas muito código Python existente foi escrito assumindo a existência do GIL, então é importante avaliar o impacto dessa mudança.
- Em outras linguagens ou runtimes, muitas vezes não se usa um mecanismo semelhante ao GIL; por exemplo, o Node.js adota uma abordagem de maximizar o desempenho em thread única por meio de I/O assíncrono.
- Ao adotar essa tecnologia, é preciso revisar a segurança de threads no código existente e, se necessário, considerar refatorações. É importante equilibrar bem os ganhos de desempenho obtidos ao desativar o GIL com a estabilidade.
Ainda não há comentários.