Этот вопрос проверяет знание того, где существует Global Interpreter Lock, какие реализации Python им обладают и как он влияет на многопоточность.
GIL присутствует в интерпретаторах Python, основанных на CPython — самой распространённой реализации. Он также есть в PyPy (для совместимости).
В Jython, IronPython и некоторых экспериментальных интерпретаторах GIL отсутствует, поскольку они используют другие модели исполнения.
GIL влияет только на интерпретаторы Python, а не на язык как таковой: в других языках (Java, Go, Rust) такой механики нет.
Из-за GIL потоки в CPython не могут выполнять Python-код параллельно, но могут параллелиться при IO или вызовах C-расширений.
Чтобы понимать, где встречается GIL, нужно отличать язык Python и его конкретные реализации.
Определение:GIL (Global Interpreter Lock) — глобальная блокировка в интерпретаторе Python, позволяющая одновременно выполнять байткод только одному потоку.
GIL — это часть CPython, а не часть самого языка Python.
Самая распространённая, то, что люди обычно называют «Python».
GIL присутствует и ограничивает параллельность потоков.
Все версии до Python 3.12 включительно имеют GIL (в 3.13 → экспериментальный "nogil").
Альтернативная реализация с JIT.
Тоже содержит GIL для совместимости и упрощения модели памяти.
Исполняется на JVM → нет GIL.
Потоки работают как обычные Java-потоки.
Работает на .NET → нет GIL.
Использует нативную многопоточность CLR.
Реализация на GraalVM, GIL нет, но совместимость ограничена.
CPython использует простую модель управления памятью — refcounting, требующий синхронизации.
GIL упрощает устройство интерпретатора и делает его быстрым для однопоточного кода.
Другие платформы (JVM, .NET) уже имеют полноценные модели параллелизма → GIL там не нужен.
В большинстве проектов используется CPython → GIL влияет на разработку.
Для CPU-интенсивных задач:
используем процессы (multiprocessing),
либо C-расширения, которые освобождают GIL.
Для IO-задач GIL почти не мешает.
GIL существует только в некоторых реализациях Python (CPython, PyPy) и отсутствует в других (Jython, IronPython). Это особенность конкретного интерпретатора, а не самого языка.