GIL, o per esteso Golal Interpreter Lock, è un blocco (o "mutex") del linguaggio Python che consente di ad un solo thread di prendere il controllo dell'interprete. In questo modo è possibile eseguire un unico thread alla volta, cosa che non rappresenta un limite nelle applicazioni single-threaded ma può diventare un problema in tutti gli altri casi. Si pensi per esempio ai software per ambienti con architetture CPU multi-core. Ecco perché nelle scorse ore il ramo main di Python presenta una novità rivelante.
La nuova impostazione del GIL in Python
Gli sviluppatori del linguaggio hanno deciso di agire direttamente su CPython, l'implementazione in C che rappresenta il principale riferimento per Python, e di introdurre il supporto per la direttiva PYTHON_GIL
settata su 0:
PYTHON_GIL=0
Tale impostazione equivale a -X gil=0
e, quando l'interprete è in fase di esecuzione, libera i task che prevedono il threading. Ciò non significa che GIL verrà abbandonato improvvisamente, la distribuzione della nuova specifica sarà infatti graduale e se ne dovranno valutare gli effetti. Per ora tutto è affidato alla PEP (Python Enhancement Proposal) 703 che introduce GIL in modalità opzionale.
Python progresses towards faster concurrency: option to disable GIL merged into main code https://t.co/FWYDQyuv0p
— devclass (@d3vclass) March 12, 2024
Il limiti di GIL
Di per sé GIL rappresenta una sorta di valvola di sicurezza per la gestione della memoria. Diversi sviluppatori hanno però criticato i suoi effetti sulla programmazione concorrente, se infatti l'interprete può essere occupato da un unico thread la concorrenza non è possibile. Vi sono applicazioni in cui un singolo processo esegue decine di thread, si possono quindi immaginare gli effetti di GIL a livello di performance e non solo. Volendo esiste la possibilità di effettuare un workaround basato sul codice nativo ma si tratta di una soluzione d'emergenza, soprattutto quando si sviluppano progetti in ambito collaborativo.
Ora non resta che attendere i feedback dei tester. Perché se da una parte un GIL impostato a 0 può rappresentare un vantaggio, dall'altra è lecito attendersi problemi di compatibilità con alcune applicazioni. La possibilità di lavorare più facilmente con il codice multi-threading offrirà sicuramente un beneficio per tutte le piattaforme Python che sfruttano l'interazione con modelli generativi.