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

Как устроен GIL

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

Ключевые моменты:

  1. GIL блокирует интерпретатор, поэтому параллельное выполнение Python-кода в нескольких потоках невозможно.
  2. Потоки могут выполняться по очереди, переключаясь через определенные интервалы (например, после ~15 мс или при операциях I/O).
  3. GIL не мешает работе нескольких процессов (multiprocessing), так как у каждого процесса свой GIL.

Пример:

python
import threading

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

# Два потока выполняются последовательно из-за GIL
t1 = threading.Thread(target=count)
t2 = threading.Thread(target=count)
t1.start(); t2.start()
t1.join(); t2.join()  # Время выполнения ~2x одного потока

Обход GIL:

  • Использование процессов (multiprocessing).
  • Вынос CPU-bound задач в C-расширения (например, NumPy).
  • Альтернативные интерпретаторы (Jython, IronPython).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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