Autoriser la désactivation du GIL
- Il est désormais possible de désactiver le GIL (Global Interpreter Lock) en définissant
PYTHON_GIL=0 ou -X gil=0.
- Les structures de données liées au GIL sont initialisées, mais lorsque le GIL est désactivé,
take_gil() et drop_gil() retournent immédiatement.
- Quelques tests et petits programmes ont été exécutés avec le GIL désactivé, et des programmes multithread basiques fonctionnent aussi parfois.
- Lorsqu'on essaie d'exécuter l'ensemble de la suite de tests, un crash survient rapidement dans
test_asyncio.
Ajout du mécanisme de désactivation du GIL
- Une discussion a eu lieu autour de l'issue (#116167) visant à ajouter un mécanisme de désactivation du GIL.
- Une fonctionnalité permettant de désactiver le GIL a été ajoutée dans les builds free-threaded.
- Le suivi continue pour la réactivation du GIL (#116322) ainsi que pour sa désactivation par défaut (#116329).
Revue de code et tests
- Il y a eu des échanges autour de la demande de revue de code et de l'ajout de cas de test.
- Des propositions ont été faites pour documenter la variable d'environnement
PYTHON_GIL et recueillir les retours des utilisateurs.
- Sont également inclus l'ajout de l'option
-X gil, sa prise en compte dans sys.flags, et des modifications des tests qui manipulent les variables d'environnement.
L'avis de GN⁺
- Ce changement pourrait avoir un impact majeur sur la communauté Python, car le GIL est un facteur bien connu qui limite les performances du multithreading en Python.
- La possibilité de désactiver le GIL peut apporter des gains de performance, mais elle peut aussi entraîner des problèmes de stabilité et de compatibilité, ce qui impose une approche prudente.
- Exécuter Python sans GIL peut offrir des avantages, en particulier pour les tâches liées au traitement parallèle, mais une grande partie du code Python existant a été écrite en supposant la présence du GIL, ce qui rend importante l'évaluation de l'impact de ce changement.
- Dans d'autres langages ou runtimes, on n'utilise souvent pas de mécanisme comparable au GIL ; par exemple, Node.js adopte une approche visant à maximiser les performances en thread unique via les E/S asynchrones.
- Lors de l'adoption de cette technologie, il faut examiner la sûreté des threads dans le code existant et envisager un refactoring si nécessaire. Il est important de bien équilibrer les gains de performance obtenus par la désactivation du GIL et la stabilité.
Aucun commentaire pour le moment.