【发布时间】:2011-03-29 16:35:05
【问题描述】:
parallel.for 是如何工作的。它是否为每个循环调用线程/将循环分成几部分并并行执行?如果是这样,那么我们能否确保与正常 for 循环相同的结果?我测试了性能,它确实使用了多核处理器。但我想知道内部工作是如何工作的
【问题讨论】:
标签: asp.net .net-4.0 parallel-processing task-parallel-library
parallel.for 是如何工作的。它是否为每个循环调用线程/将循环分成几部分并并行执行?如果是这样,那么我们能否确保与正常 for 循环相同的结果?我测试了性能,它确实使用了多核处理器。但我想知道内部工作是如何工作的
【问题讨论】:
标签: asp.net .net-4.0 parallel-processing task-parallel-library
Parallel.For 为多个并发迭代划分工作。默认情况下,它使用默认任务调度程序来调度迭代,它基本上使用当前线程以及许多线程池线程。有一些重载可以让你改变这种行为。
并行循环可能看起来与常规循环非常相似,但实际上存在许多重要差异。首先,不能保证迭代的顺序。 IE。代码不能假定任何特定顺序。这样做会导致不可预知的结果。
此外,由于代码可能在多个线程上运行,因此异常处理与常规 for 循环完全不同。 Parallel.For 将捕获线程的异常并将这些异常作为AggregateException 实例中的内部异常封送回调用线程。
更多详情请查看Parallel Programming with Microsoft .NET by Microsoft 模式和实践。
【讨论】:
parallel.for 循环在不同进程中并行运行循环的迭代。只有在迭代相互独立时才能使用它。仅当迭代是独立的时,您才能假设并行和非并行 for 循环将产生相同的结果。
【讨论】: