Despacho Python: Tornando o GIL opcional

O Conselho de Direção fez um grande anúncio sobre o futuro do Python. Nomeadamente, eles decidiram tornar o Global Interpreter Lock (GIL) opcional no CPython e eventualmente remover o GIL por completo.

Esta é uma decisão enorme que irá alterar fundamentalmente o Python.

Por isso, neste post, vou falar sobre o que é a GIL, as suas vantagens e desvantagens e o que o futuro nos reserva.

O GIL

Vou analisar o Global Interpreter Lock uma palavra de cada vez, em ordem inversa, começando por fechadura e depois intérprete e finalmente, global.

Um bloqueio é um mecanismo que permite que apenas uma thread seja executada de cada vez. Assim, quando uma thread obtém o bloqueio, ela ganha acesso exclusivo ao interpretador Python.

Um interpretador é o programa para executar o código Python.

A palavra "global" aqui se refere ao escopo do bloqueio do interpretador. Como o bloqueio do interpretador é global, ele garante que apenas uma thread executa o código Python de cada vez dentro de um único processo.

Crédito: EstadoNeo.

Portanto, o GIL é um mecanismo que impede que várias threads sejam executadas ao mesmo tempo através do interpretador. Mas por que é que queríamos isso?

Vantagens

A principal vantagem do GIL é que torna as coisas mais fáceis. Gerir a memória é mais fácil, gerir as threads é mais fácil e criar módulos é mais fácil.

Sem o GIL, você pode rapidamente ter problemas com multithreading. Se você não colocar os bloqueios locais apropriados para cada thread, você pode acabar travando o Python ou corrompendo alguma outra memória no computador.

E se não estiver a fazer multithreading, então o GIL é super útil, porque mantém tudo a funcionar sem problemas.

Assim, o GIL mantém as coisas simples e seguras.

Então, porque é que não havia de querer isso?

Desvantagens

A troca aqui é a facilidade pela rapidez.

Ao impedir o multithreading, o GIL torna o CPython mais lento e com menos desempenho do que algumas outras linguagens (como C++, Go e Rust).

Especialmente com a explosão da IA nos últimos meses, o GIL está a tornar-se cada vez mais um problema na execução de programas de forma rápida e eficiente.

O futuro da GIL

Assim, agora que o Conselho de Direção anunciou que aceitou a Python Enhancement Proposal (PEP) 703, escrito por Sam GrossEstamos a entrar em águas desconhecidas.

Inúmeras extensões foram escritas com o GIL em mente. Todos os padrões estabelecidos com o CPython dependem do GIL. Todos constroem em CPython com a GIL no centro de seus programas (intencionalmente ou não).

Assim, o Conselho de Direção está, numa primeira fase, a tornar o GIL facultativo, mas, a longo prazo, tenciona suprimi-lo completamente.

Tal como foi dito no post, "Não queremos criar uma divisão permanente entre compilações com-GIL e sem-GIL (e módulos de extensão)".

Isto vai transformar absolutamente a Python e, talvez o mais interessante, de formas que ainda ninguém conhece. Brett Cannon, numa sondagem à equipa de programadores principaisescreveu que "fazer Python free-threaded... tem um monte de incógnitas. Nós não sabemos quanto código implicitamente depende do GIL, ou não é seguro para threads de maneiras sutis que são mascaradas pelo GIL."

O GIL está a desaparecer - o que é que vai levar com ele?

E, mais importante ainda, como será o novo CPython?

Deixe um comentário