Permitir desactivar el GIL
- Ahora es posible desactivar el GIL (Global Interpreter Lock) configurando
PYTHON_GIL=0 o -X gil=0.
- Las estructuras de datos relacionadas con el GIL se inicializan, pero al desactivarlo se hace que
take_gil() y drop_gil() regresen de forma anticipada.
- Se ejecutaron algunas pruebas y programas pequeños con el GIL desactivado, y los programas básicos con hilos a veces también funcionan.
- Al intentar ejecutar toda la suite de pruebas, falla rápidamente en
test_asyncio.
Agregar mecanismo para desactivar el GIL
- Hubo discusión sobre el issue (#116167) para agregar un mecanismo de desactivación del GIL.
- Se añadió la capacidad de desactivar el GIL en compilaciones free-threaded.
- Se da seguimiento al trabajo para volver a activar el GIL (#116322) y para desactivarlo por defecto (#116329).
Revisión de código y pruebas
- Hubo discusión sobre la solicitud de revisión de código y la adición de casos de prueba.
- También hubo una propuesta para documentar la variable de entorno
PYTHON_GIL y obtener retroalimentación de los usuarios.
- Se incluye la adición de la opción
-X gil, su reflejo en sys.flags y la modificación de pruebas que manejan variables de entorno.
Opinión de GN⁺
- Este cambio podría tener un gran impacto en la comunidad de Python, ya que el GIL es un elemento bien conocido por limitar el rendimiento del multithreading en Python.
- La capacidad de desactivar el GIL puede traer mejoras de rendimiento, pero al mismo tiempo podría causar problemas de estabilidad y compatibilidad, por lo que se necesita un enfoque cuidadoso.
- Ejecutar Python sin GIL puede ofrecer ventajas, especialmente en tareas relacionadas con procesamiento en paralelo, pero es importante evaluar el impacto de este cambio porque mucho código existente de Python fue escrito asumiendo la existencia del GIL.
- En otros lenguajes o runtimes a menudo no se usan mecanismos similares al GIL; por ejemplo, Node.js adopta un enfoque para maximizar el rendimiento de un solo hilo mediante I/O asíncrono.
- Al adoptar esta tecnología, es necesario revisar la seguridad de hilos del código existente y, si hace falta, considerar refactorizaciones. Es importante equilibrar bien las ventajas de rendimiento obtenidas al desactivar el GIL con la estabilidad.
Aún no hay comentarios.