@beduin01

В какой момент GIL усыпляет потоки?

Согласно документации GIL пробуждает\усыпляет потоки в тот момент времени, когда потоки не трогают какие-то общие данные. И тут же написано, что он делает это каждые 5мс. Вопрос как это все вяжется?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
GIL не усыпляет и не пробуждает потоки. GIL - это блокировка, используемая системными потоками интерпретатора, гарантирующая, что два или более потока не будут выполняться одновременно. Поток интерпретатора вызывает cv_wait на GIL с таймаутом в 5 миллисекунд. Если GIL не будет освобождён в течении 5 мс, поток установит переменную gil_drop_request и вызовет cv_wait ещё раз. Поток владеющий GIL периодически проверяет состояние переменной gil_drop_request и освобождает GIL, если она установлена. Так же поток освобождает GIL при любых операция ввода\вывода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы