GIL в обычном CPython позволяет только одному потоку интерпретатора исполнять Python-код одновременно. Он исторически упрощал защиту внутренних структур и подсчёт ссылок, но ограничивает CPU-параллелизм потоков.
В чём основная проблема GIL и почему он появился в Python?
GIL в обычном CPython позволяет только одному потоку интерпретатора исполнять Python-код одновременно. Он исторически упрощал защиту внутренних структур и подсчёт ссылок, но ограничивает CPU-параллелизм потоков.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
GIL в обычном CPython позволяет только одному потоку интерпретатора исполнять Python-код одновременно. Он исторически упрощал защиту внутренних структур и подсчёт ссылок, но ограничивает CPU-параллелизм потоков.
При ожидании I/O и в некоторых C-библиотеках GIL освобождается, поэтому потоки всё равно полезны. Ограничение не означает отсутствие гонок: составные бизнес-операции требуют собственной синхронизации. Процессы обходят единый GIL через отдельные интерпретаторы, но добавляют стоимость обмена. Free-threaded сборки меняют эту модель; поэтому утверждение «во всём Python всегда есть GIL» слишком широкое. В ответе важно назвать реализацию и режим сборки.