Задать вопрос
@beduin01

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

Согласно документации GIL пробуждает\усыпляет потоки в тот момент времени, когда потоки не трогают какие-то общие данные. И тут же написано, что он делает это каждые 5мс. Вопрос как это все вяжется?
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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