GIL¶
GIL, он же Global Interpreter Lock, это мьютекс, который предотвращает выполнение нескольких потоков в одно и то же время. GIL гарантирует, что только 1 поток выполняет код в любой момент времени. Он создан для обеспечения безопасной многопоточной работы CPython, например для безопасной работы C-расширений.
Как он работает¶
- При запуске интерпретатора инициализируется GIL
- Перед выполнением, поток проверяет, занят ли GIL. Если нет - он занимает его и начинает выполнять свой код. Это предотвращает одновременное изменение объектов несколькими потоками.
- После выполнения поток освобождает GIL, позволяя другим потокам захватить его и начать своё выполнение своего кода.
- GIL переодически сам освобождается для предотвращения долгого удержания одним потоком. Ранее (до python 3.2) это происходило каждые 100 инструкций байт-кода, сейчас - через интервал указанный в
sys.getswitchinterval()