Встречается на собеседованиях • сегодня

Как работает GIL

GIL (Global Interpreter Lock) — это мьютекс в CPython, который защищает доступ к объектам Python, предотвращая параллельное выполнение байт-кода несколькими потоками. Это означает, что даже в многопоточных приложениях только один поток может исполняться в любой момент времени.

Основные последствия:

  • Потоки Python не выполняются по-настоящему параллельно на многоядерных CPU.
  • I/O-операции (сеть, файлы) могут выполняться параллельно, так как GIL освобождается во время ожидания.
  • Вычислительные задачи (CPU-bound) не ускоряются многопоточностью.

Пример:

python
import threading

def count():
    n = 0
    while n < 10_000_000:
        n += 1

# Однопоточный вариант
count()
count()  # ~0.5s

# Многопоточный вариант
t1 = threading.Thread(target=count)
t2 = threading.Thread(target=count)
t1.start(); t2.start()
t1.join(); t2.join()  # ~0.8s (медленнее из-за GIL)

Обходные пути:

  • Использовать multiprocessing для CPU-bound задач.
  • Переместить тяжелые вычисления в C-расширения (отпуская GIL).
  • Использовать асинхронный код (asyncio) для I/O-bound задач.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы