Ответ
CPU-bound (или вычислительно-ограниченная) задача — это задача, производительность которой упирается в скорость центрального процессора (CPU), а не в операции ввода-вывода (I/O-bound).
Ключевые характеристики:
- Интенсивные вычисления: Задача выполняет большое количество математических или логических операций.
- Минимальное время ожидания: Процесс практически не простаивает в ожидании данных с диска, из сети или от других устройств.
- Высокая утилизация CPU: Во время выполнения такой задачи одно или несколько ядер процессора нагружены на 100%.
Классический пример — вычисление чисел Фибоначчи:
# Эта функция полностью загружает одно ядро CPU
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
# Выполнение задачи, ограниченной производительностью процессора
result = fibonacci(40)
Способы оптимизации в Python:
- Многопроцессорность (
multiprocessing
): Основной способ параллелизации в Python для обхода Global Interpreter Lock (GIL) и задействования нескольких ядер CPU. - Оптимизированные библиотеки: Использование библиотек, написанных на C/Fortran (например, NumPy, SciPy), которые выполняют вычисления вне GIL.
- JIT-компиляция: Применение инструментов вроде Numba, которые компилируют Python-код в быстрый машинный код "на лету".
Важно: Асинхронность (asyncio
) неэффективна для чисто CPU-bound задач, так как она предназначена для оптимизации ожидания операций ввода-вывода, а не для ускорения вычислений.