Esta publicación del creador de Python, Guido Van Rossum, menciona un intento temprano de eliminar el GIL de Python:
Esto se ha intentado antes, con resultados decepcionantes, por lo que soy reacio a esforzarme mucho. En 1999 Greg Stein (¿con Mark Hammond?) Produjo una bifurcación de Python (1.5 creo) que eliminó el GIL, reemplazándolo con bloqueos de grano fino en todas las estructuras de datos mutables. También presentó parches que eliminaron muchas de las dependencias en las estructuras de datos mutables globales, lo cual acepté. Sin embargo, después de la evaluación comparativa, se demostró que incluso en la plataforma con la primitiva de bloqueo más rápida (Windows en ese momento) ralentizó la ejecución de un solo subproceso casi dos veces, lo que significa que en dos CPU, podría obtener un poco más de trabajo hecho sin el GIL que en una sola CPU con el GIL. Esto no fue suficiente, y el parche de Greg desapareció en el olvido. (Ver la reseña de Greg sobre la actuación).
Apenas puedo discutir con los resultados reales, pero realmente me pregunto por qué sucedió esto. Presumiblemente, la razón principal por la que eliminar el GIL de CPython es tan difícil es por el sistema de gestión de memoria de conteo de referencia. Un programa típico de Python llamará Py_INCREFy Py_DECREFmiles o millones de veces, por lo que es un punto clave de la contención si tuviéramos que envuelva cerraduras alrededor de ella.
Pero, no entiendo por qué agregar primitivas atómicas ralentizaría un solo programa de subprocesos. Supongamos que acabamos de modificar CPython para que la variable de recuento en cada objeto Python fuera una primitiva atómica. Y luego solo hacemos un incremento atómico (instrucciones de buscar y agregar) cuando necesitamos incrementar el recuento de referencia. Esto haría que el recuento de referencias de Python sea seguro para subprocesos, y no debería tener ninguna penalización de rendimiento en una aplicación de un solo subproceso, porque no habría contención de bloqueo.
Pero, por desgracia, muchas personas que son más inteligentes que yo lo han intentado y han fallado, así que obviamente me falta algo aquí. ¿Qué hay de malo en la forma en que estoy viendo este problema?