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 подскажет развёрнутый ответ в реальном времени.