Выбор ответа Junior GIL, потоки и процессы спрашивают часто обновлено

Потоки для CPU-bound задачи

Вопрос

Функция на чистом Python считает хеши в цикле 10 секунд. Её запустили в 4 потоках на 4-ядерной машине (обычный CPython с GIL). Сколько займёт работа?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Около 40 секунд или чуть больше: потоки идут по очереди. Из-за GIL четыре потока делят одно ядро для выполнения байткода, и суммарное время почти как у последовательного выполнения, а переключения добавляют накладные расходы.

Варианты ответа

  1. Около 40 секунд или чуть больше: потоки идут по очередиправильный ответ
  2. Около 10 секунд: каждый поток работает на своём ядре
  3. Около 2,5 секунды: работа делится между четырьмя потоками
  4. Программа упадёт: GIL запрещает CPU-bound код в потоках

Разбор

Из-за GIL четыре потока делят одно ядро для выполнения байткода, и суммарное время почти как у последовательного выполнения, а переключения добавляют накладные расходы. Чтобы задействовать ядра, берут процессы (ProcessPoolExecutor), C-расширения, отпускающие GIL, или free-threaded сборку. Ошибки нет, просто нет ускорения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.