Faire évoluer les performances d’`asyncio` sur Python sans GIL (Free-Threaded Python)
(labs.quansight.org)Conclusion
Dans le build free-threaded de Python 3.14, asyncio a rendu possible une exécution réellement parallèle en supprimant le verrou global de l’interpréteur (GIL) et en basculant vers une gestion d’état par thread. Cela permet désormais une montée en charge linéaire des performances en fonction du nombre de threads, avec la possibilité d’exécuter plusieurs boucles d’événements en parallèle, ouvrant ainsi de nouvelles perspectives pour les applications asyncio multithread à hautes performances.
Principaux changements
- Suppression du GIL (Global Interpreter Lock) : le build free-threaded de CPython retire le GIL, ce qui permet à plusieurs threads d’exécuter du code Python simultanément.
- Garantie de la sûreté des threads :
asyncioassure la thread-safety en utilisant une gestion d’état par thread plutôt que des structures de données globales.- Stockage des tâches : à la place du
WeakSetglobal,asyncioutilise une liste circulaire doublement chaînée par thread, ce qui élimine la contention sur les verrous et le surcoût des références faibles. - Stockage de la tâche courante : la « tâche courante » est stockée dans l’état du thread, ce qui permet un accès plus rapide et sans verrou.
- Stockage des tâches : à la place du
Gains de performance
- Montée en charge linéaire des performances : selon les benchmarks, dans le build free-threaded, les performances d’
asyncios’améliorent linéairement à mesure que le nombre de threads augmente. - Benchmark TCP : le débit a fortement augmenté dans le build free-threaded par rapport au build avec GIL activé.
- Benchmark de web scraping : dans un benchmark de web scraping avec
aiohttp, l’utilisation de plusieurs workers sur le build free-threaded a permis plus du double de performances.
Aucun commentaire pour le moment.