Ответ вслух Middle GIL, потоки и процессы спрашивают часто обновлено

Что такое GIL и как с ним жить

Вопрос

Что такое GIL, на что он влияет и как вы обходите его ограничения?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «GIL это глобальная блокировка интерпретатора CPython: в каждый момент байткод выполняет только один поток процесса. Нужна она в первую очередь из-за подсчёта ссылок: без неё каждое изменение счётчика пришлось бы защищать.

Что должно прозвучать в ответе

  • Один поток выполняет байткод в момент времени, ради подсчёта ссылок

  • I/O-bound: потоки работают, GIL отпускается при ожидании

  • CPU-bound: процессы, C-расширения, векторизация

  • GIL не защищает от гонок в пользовательском коде

  • asyncio для большого числа соединений

  • Free-threaded сборка 3.13/3.14 существует, но не по умолчанию

Что могут спросить следом

  • Будет ли гонка при x += 1 из двух потоков?
  • Как передать большие данные между процессами без копирования?
  • Почему бы просто не убрать GIL?

Разбор

Образцовый ответ: «GIL это глобальная блокировка интерпретатора CPython: в каждый момент байткод выполняет только один поток процесса. Нужна она в первую очередь из-за подсчёта ссылок: без неё каждое изменение счётчика пришлось бы защищать. Практические следствия такие. Для I/O-bound задач, запросов к сети и базе, потоки работают нормально, потому что при блокирующем ожидании GIL отпускается. Для CPU-bound кода на чистом Python потоки не ускоряют, и я беру ProcessPoolExecutor, где у каждого процесса свой интерпретатор и свой GIL, или переношу горячий код в numpy или расширение, которое отпускает GIL. Если соединений тысячи, беру asyncio, потому что поток на соединение дорог. Важно: GIL не делает код потокобезопасным, counter += 1 из нескольких потоков может терять обновления, нужен Lock. И новое: в 3.13 появилась экспериментальная сборка без GIL, в 3.14 её официально поддерживают, но по умолчанию CPython пока с GIL, и библиотеки на C только адаптируются».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.