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

Как GIL влияет на производительность

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

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

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

Пример CPU-bound проблемы:

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()  # Время ~ как два последовательных вызова

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

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

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

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

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