Escalando el rendimiento de asyncio en Python sin GIL (Free-Threaded Python)
(labs.quansight.org)Conclusión
En el build free-threaded de Python 3.14, asyncio eliminó el bloqueo global del intérprete (GIL) y cambió a una gestión de estado por hilo, lo que hizo posible la ejecución realmente paralela. Gracias a esto, el rendimiento escala linealmente según la cantidad de hilos, permitiendo ejecutar varios event loops en paralelo y abriendo nuevas posibilidades para aplicaciones asyncio multihilo de alto rendimiento.
Cambios principales
- Eliminación del GIL (Global Interpreter Lock): el build free-threaded de CPython elimina el GIL para permitir que varios hilos ejecuten código Python al mismo tiempo.
- Garantía de seguridad entre hilos: asyncio aseguró la seguridad entre hilos usando gestión de estado por hilo en lugar de estructuras de datos globales.
- Almacenamiento de tareas: en lugar del
WeakSetglobal, usa una lista circular doblemente enlazada por hilo, eliminando la contención por bloqueos y la sobrecarga de las referencias débiles. - Almacenamiento de la tarea actual: la "tarea actual" se guarda en el estado del hilo, lo que permite un acceso más rápido y sin bloqueos.
- Almacenamiento de tareas: en lugar del
Mejora de rendimiento
- Escalado lineal del rendimiento: según los resultados de los benchmarks, en el build free-threaded el rendimiento de asyncio mejora linealmente a medida que aumenta el número de hilos.
- Benchmark de TCP: en comparación con un build con GIL habilitado, el build free-threaded mostró un gran aumento en el throughput.
- Benchmark de web scraping: en un benchmark de web scraping con aiohttp, al usar varios workers en el build free-threaded, el rendimiento mejoró más del doble.
Aún no hay comentarios.