El Global Interpreter Lock es un mutex de CPython que deja ejecutar bytecode de Python a un solo hilo a la vez, y protege el estado del intérprete, como los contadores de referencias y las estructuras internas de los objetos. Eso significa que los hilos no te dan aceleración en paralelo para código Python con carga de CPU, pero sí ayudan con la E/S, porque el lock se libera durante las llamadas bloqueantes y durante el trabajo de las extensiones en C.
Por qué lo preguntan los entrevistadores
Es la pregunta filtro clásica para medir profundidad en Python. Los entrevistadores quieren oír que entiendes por qué los hilos ayudan en trabajo con carga de E/S y no en trabajo con carga de CPU, y que sabes recurrir a multiprocessing o a extensiones nativas cuando necesitas paralelismo real. Las respuestas vagas del tipo Python no puede con los hilos delatan a alguien que ha memorizado un eslogan en vez de razonar sobre el runtime.
Cómo estructurar tu respuesta
- Define el GIL en una frase.
- Di qué protege y por qué CPython lo tiene.
- Contrasta el trabajo con carga de E/S y el de carga de CPU.
- Nombra las salidas de emergencia que usas de verdad.
Ejemplo de respuesta
El GIL es un único lock de CPython que garantiza que solo un hilo ejecute bytecode de Python en cada momento. Existe porque el conteo de referencias no es seguro entre hilos, y un lock por objeto sería más lento para el caso de un solo hilo, que es donde vive la mayor parte del código. En la práctica, eso significa que los hilos son estupendos para esperar e inútiles para calcular. En un pipeline de datos en el que trabajé teníamos un paso que descargaba unas ochocientas URLs, y pasarlo de un bucle en serie a un thread pool lo bajó de unos nueve minutos a menos de uno, porque cada worker se pasa la vida bloqueado en un socket y suelta el lock mientras espera. El paso de parseo que venía al lado no mejoró nada, así que ese lo movimos a un process pool. Numpy y otras extensiones en C también sueltan el lock dentro de llamadas nativas largas, y por eso la matemática pesada con arrays puede parecer paralela incluso con hilos. Cuando alguien me dice que Python no puede con la concurrencia, suelo preguntarle a qué tipo se refiere.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Y entonces cómo lo esquiva multiprocessing?
- ¿Qué le pasa al GIL cuando se ejecuta una extensión en C?
- ¿Has mirado el build free-threaded?
Más preguntas para Desarrollador Python
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas