asp.net - Как работает parallel.for - PullRequest
7 голосов
/ 29 марта 2011

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

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Parallel.For разбивает работу на несколько параллельных итераций. По умолчанию он использует планировщик задач по умолчанию для планирования итераций, который по существу использует текущий поток, а также количество потоков пула потоков. Существуют перегрузки, которые позволят вам изменить это поведение.

Параллельный цикл может выглядеть очень похоже на обычный цикл, но на самом деле есть ряд важных отличий. Прежде всего, порядок итераций не гарантируется. То есть код не может принимать какой-либо конкретный порядок. Это приведет к непредсказуемым результатам.

Кроме того, поскольку код может выполняться в нескольких потоках, обработка исключений полностью отличается от регулярного цикла for. Parallel.For будет перехватывать исключения для потоков и перенаправлять их в вызывающий поток как внутренние исключения в экземпляре AggregateException.

Для получения дополнительной информации, пожалуйста, проверьте Параллельное программирование с Microsoft .NET по шаблонам и методикам Microsoft.

2 голосов
/ 29 марта 2011

parallel.for циклы запускают итерации цикла в разных процессах параллельно.Вы можете использовать это, только если итерации не зависят друг от друга.Только если итерации независимы, вы можете предполагать, что одинаковые результаты будут получены в параллельном и непараллельном цикле for.

...