Global Interpreter Lock (GIL) — это мьютекс в CPython, который гарантирует, что только один поток может выполнять байт-код Python в любой момент времени. Он существует в первую очередь для защиты управления памятью CPython, особенно сборщика мусора на основе подсчёта ссылок, от проблем с одновременным доступом.
Даже в многопоточной программе GIL заставляет потоки выполняться по очереди. Это означает:
CPU-bound задачи (например, численные вычисления, обработка данных) существенно ограничены GIL, потому что потоки не могут одновременно использовать несколько ядер. Многопоточность может фактически работать хуже, чем однопоточность, из-за накладных расходов на конкуренцию за блокировку.
I/O-bound задачи (например, сетевые запросы, операции с файлами) в основном не затронуты, потому что потоки освобождают GIL во время ожидания завершения операций ввода-вывода, позволяя другим потокам выполняться.
multiprocessing для CPU-bound задач — у каждого процесса свой собственный GILasyncio для I/O-bound параллелизмаNumPy, которые освобождают GIL во время тяжёлых вычисленийGIL = потокобезопасность за счёт параллелизма на CPU
GIL — это специфичная для CPython деталь реализации — альтернативные реализации вроде Jython или PyPy-STM его не имеют. Начиная с Python 3.13, вводится экспериментальная поддержка запуска CPython без GIL.
GIL в CPython необходим в основном потому, что сборщик мусора на основе подсчёта ссылок требует защиты от одновременного доступа для обеспечения безопасности памяти.
Новый — ещё не проверен сообществом
Вы