Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: gil, threading

Почему многопоточность в Python обычно не ускоряет CPU-bound задачи?

Вопрос проверяет понимание GIL и различий между CPU-bound и IO-bound задачами.

Короткий ответ

Многопоточность в Python ограничена Global Interpreter Lock (GIL), который позволяет выполнять байткод только одному потоку одновременно. Поэтому CPU-bound задачи не получают реального параллелизма. Потоки полезны для IO-bound задач, где поток ожидает ввода-вывода. Для CPU-bound задач чаще используют multiprocessing.

Длинный ответ

В CPython существует механизм GIL — глобальная блокировка интерпретатора.

Определение

GIL — это механизм, который гарантирует, что в один момент времени байткод Python выполняет только один поток.

Что происходит при CPU-bound задачах

Если несколько потоков:

  • выполняют вычисления

  • активно используют CPU

то они:

  • конкурируют за GIL

  • часто переключаются

  • не выполняются параллельно

Это может даже замедлить программу.

Когда потоки эффективны

Многопоточность полезна:

  • сетевые запросы

  • работа с файлами

  • ожидание ответа

Пример IO-bound:

# потоки ждут сеть, CPU свободен

Как ускорить CPU-bound задачи

Используют:

  1. multiprocessing

  2. C-расширения

  3. NumPy

Пример multiprocessing:

from multiprocessing import Pool

Вывод

Многопоточность в Python не ускоряет CPU-bound задачи из-за GIL. Для параллельных вычислений используется multiprocessing.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#gil

#threading

Подпишись на Python Developer в телеграм