gh-116167: Permitir deshabilitar el GIL
Alcance del cambio / estado actual
- El cambio proviene del trabajo para hacer que el GIL sea opcional (PEP 703).
- El PR actual requiere compilar CPython con una bandera especial y luego deshabilitar el GIL mediante un interruptor en tiempo de ejecución.
- Esto se presenta explícitamente como un paso temprano, en fase de investigación: se espera que funcione de forma fiable solo para programas sin hilos.
- Las pruebas de asyncio fallan con el GIL deshabilitado; algunos programas simples con hilos “parecen” funcionar, pero no se garantiza que sean seguros.
Rendimiento en un solo hilo vs. múltiples hilos
- Eliminar el GIL permite un paralelismo real en varios núcleos para Python multihilo, útil para cargas de trabajo con muchos hilos (p. ej., ML, investigación).
- Para código de un solo hilo, varios comentaristas señalan una penalización de rendimiento por el bloqueo adicional; PEP 703 cita una ralentización del 5–15%.
- Algunos esperan que más optimizaciones puedan reducir con el tiempo la sobrecarga de las compilaciones nogil para un solo hilo.
Asyncio, hilos y compatibilidad
- Varios comentarios aclaran: la E/S asíncrona y los hilos del sistema operativo son distintos; las roturas actuales están sobre todo en pruebas de asyncio que mezclan hilos y corrutinas.
- Hay confusión en el hilo sobre si “cualquier código con hilos” se rompe; el consenso es: muchos patrones de hilos existentes, especialmente los que implican objetos compartidos, no son seguros en esta versión.
Alternativas a los hilos hoy
multiprocessingse cita ampliamente como una solución de contorno para tareas limitadas por CPU, pero:- En Windows y macOS, la falta de
fork/ el uso despawnlo hace lento e incómodo. - Grandes huellas de memoria y estructuras de datos compartidas complejas hacen que el paralelismo basado en procesos sea doloroso.
- En Windows y macOS, la falta de
- Bibliotecas como Ray ayudan con múltiples procesos y memoria compartida, pero tienen sus propias limitaciones (por ejemplo, objetos inmutables centrados en arrays).
Impacto en el ecosistema y las extensiones C
- La mayoría de las extensiones nativas (C/C++) dependen implícitamente del GIL para la seguridad en hilos (globales, mutaciones no sincronizadas de listas, etc.).
- El plan es: si una extensión depende del GIL, lo seguirá manteniendo habilitado; a largo plazo, las extensiones deberán actualizarse para ser seguras sin GIL o usar explícitamente el GIL.
Python frente a otros lenguajes y tipado
- Varios comentaristas sostienen que, si hoy quieres “Python + tipos + concurrencia”, Go, Rust, C#, Kotlin, Julia, Nim o lenguajes BEAM pueden ser mejores opciones.
- Otros replican que el ecosistema de Python (NumPy, PyTorch, herramientas de ML/DS) domina, y que nogil junto con comprobadores de tipos modernos (p. ej., mypy, pyright) hacen a Python competitivo para muchos casos de uso.
- Continúa el debate sobre la velocidad de Python y su modelo de tipado frente a lenguajes “modernos”, con el reconocimiento de que Python seguirá siendo más lento, pero aun así puede mejorar de forma significativa.