Выбор ответа Junior GIL, потоки и процессы спрашивают часто обновлено
Потоки для CPU-bound задачи
Вопрос
Функция на чистом Python считает хеши в цикле 10 секунд. Её запустили в 4 потоках на 4-ядерной машине (обычный CPython с GIL). Сколько займёт работа?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Около 40 секунд или чуть больше: потоки идут по очереди. Из-за GIL четыре потока делят одно ядро для выполнения байткода, и суммарное время почти как у последовательного выполнения, а переключения добавляют накладные расходы.
Варианты ответа
- Около 40 секунд или чуть больше: потоки идут по очередиправильный ответ
- Около 10 секунд: каждый поток работает на своём ядре
- Около 2,5 секунды: работа делится между четырьмя потоками
- Программа упадёт: GIL запрещает CPU-bound код в потоках
Разбор
Из-за GIL четыре потока делят одно ядро для выполнения байткода, и суммарное время почти как у последовательного выполнения, а переключения добавляют накладные расходы. Чтобы задействовать ядра, берут процессы (ProcessPoolExecutor), C-расширения, отпускающие GIL, или free-threaded сборку. Ошибки нет, просто нет ускорения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.