1 pontos por GN⁺ 2024-03-12 | Ainda não há comentários. | Compartilhar no WhatsApp

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.

Ainda não há comentários.