Независимые 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 сам по себе не распараллеливает вычисления; измеряйте время и потребление ресурсов.