Есть массив независимых моделей, для каждой выполняется длительная вычислительная операция. Как организовать более быструю обработку?

Независимые CPU-bound вычисления можно распределить по ядрам через ограниченный параллелизм, например Parallel.For. Ускорение зависит от стоимости операции, числа ядер и отсутствия общих узких мест.

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

Что ответить на собеседовании

Независимые CPU-bound вычисления можно распределить по ядрам через ограниченный параллелизм, например Parallel.For. Ускорение зависит от стоимости операции, числа ядер и отсутствия общих узких мест.

Подробный разбор

Ответ с пояснениями

Независимые CPU-bound вычисления можно распределить по ядрам через ограниченный параллелизм, например Parallel.For. Ускорение зависит от стоимости операции, числа ядер и отсутствия общих узких мест.

var results = new Result[models.Length];
Parallel.For(0, models.Length,
    new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount },
    i => results[i] = Compute(models[i]));

Result и Compute обозначают тип результата и функцию вашей задачи. Каждый индекс записывается отдельно; Compute не должен небезопасно менять общее состояние. Для коротких операций расходы планирования могут перевесить пользу. Async/await сам по себе не распараллеливает вычисления; измеряйте время и потребление ресурсов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее