Python sin GIL: ¿Más velocidad y eficiencia?

Fuentes: Unlocking Python's Cores: Hardware Usage and Energy Implications of Removing the GIL

El lenguaje de programación Python es ampliamente utilizado, pero sufre una limitación conocida como el Global Interpreter Lock (GIL). El GIL, esencialmente, permite que solo un hilo de ejecución acceda al intérprete de Python a la vez, incluso en sistemas con múltiples núcleos de procesador. Esto limita el paralelismo real en tareas que podrían beneficiarse de la ejecución simultánea en varios núcleos, especialmente en aplicaciones intensivas en computación. A partir de Python 3.13, se ha introducido una versión experimental que permite desactivar el GIL, abriendo la puerta a un mayor paralelismo.

Este estudio, realizado por Salazar y Montoya, investiga el impacto de esta eliminación del GIL en el rendimiento, el consumo de energía y la utilización del hardware. Los investigadores compararon versiones de Python 3.14.2 con y sin el GIL, utilizando cuatro tipos de cargas de trabajo: cálculos basados en NumPy (operaciones numéricas vectorizadas), tareas secuenciales, hilos numéricos y hilos que manipulan objetos. Los resultados revelan que la eliminación del GIL no es una solución universal.

Para cargas de trabajo que pueden ser fácilmente paralelizadas y operan sobre datos independientes, la versión sin GIL ofrece mejoras significativas. Se observaron reducciones de hasta 4 veces en el tiempo de ejecución, lo que a su vez se tradujo en una disminución proporcional en el consumo de energía y una mejor utilización de los núcleos del procesador. Sin embargo, esta mejora viene acompañada de un aumento en el uso de memoria, principalmente debido a mecanismos de seguridad de hilos y un nuevo asignador de memoria.

En contraste, las tareas secuenciales (que no pueden ser paralelizadas) no se benefician de la eliminación del GIL y, de hecho, muestran un aumento en el consumo de energía (entre 13% y 43%). Además, las cargas de trabajo donde múltiples hilos acceden y modifican los mismos objetos simultáneamente, experimentan mejoras reducidas o incluso un rendimiento degradado debido a la contención por bloqueos (lock contention). Un punto importante es que el consumo de energía parece estar directamente relacionado con el tiempo de ejecución, lo que indica que la eliminación del GIL no afecta significativamente el consumo de energía en sí mismo, sino que lo reduce al acelerar la ejecución.

En resumen, la eliminación del GIL en Python ofrece un gran potencial para mejorar el rendimiento y la eficiencia energética en cargas de trabajo paralelizadas, pero requiere una evaluación cuidadosa para evitar efectos negativos en tareas secuenciales o en escenarios con alta contención por bloqueos. Los desarrolladores deben analizar sus aplicaciones específicas para determinar si la adopción de una versión sin GIL es beneficiosa.