Mediumgilconcurrency

Что такое GIL в Python и зачем нужен?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

GIL (Global Interpreter Lock) — мьютекс в CPython, разрешающий только одному потоку выполнять Python байткод в любой момент. Причина — reference counting: без GIL пришлось бы ставить lock на каждый объект.

# CPU-bound: threads НЕ ускоряют (GIL)
from threading import Thread
def cpu_heavy(): total = sum(i*i for i in range(10**7))
# 2 потока cpu_heavy() ≈ то же время, что 1 поток

# Решения:
from multiprocessing import Pool   # отдельные процессы = отдельные GIL
import asyncio                      # один поток, non-blocking I/O
  • GIL отпускается во время blocking I/O — threads работают для network/file;
  • C extensions (numpy) отпускают GIL для долгих вычислений;
  • PEP 703 (Python 3.13+) — experimental no-GIL build (optional);
  • Без GIL single-thread может быть медленнее из-за overhead на thread-safety, но multi-threaded — быстрее.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.