Перейти к содержанию

GIL

GIL, он же Global Interpreter Lock, это мьютекс, который предотвращает выполнение нескольких потоков в одно и то же время. GIL гарантирует, что только 1 поток выполняет код в любой момент времени. Он создан для обеспечения безопасной многопоточной работы CPython, например для безопасной работы C-расширений.

Как он работает

  1. При запуске интерпретатора инициализируется GIL
  2. Перед выполнением, поток проверяет, занят ли GIL. Если нет - он занимает его и начинает выполнять свой код. Это предотвращает одновременное изменение объектов несколькими потоками.
  3. После выполнения поток освобождает GIL, позволяя другим потокам захватить его и начать своё выполнение своего кода.
  4. GIL переодически сам освобождается для предотвращения долгого удержания одним потоком. Ранее (до python 3.2) это происходило каждые 100 инструкций байт-кода, сейчас - через интервал указанный в sys.getswitchinterval()