Parallel.For,最大线程和核心

时间:2011-04-28 21:02:02

标签: c# .net

在我们的服务器上,我们有一个四核处理器。在没有ParallelOptions参数的情况下运行Parallel.For循环时,它将使用多少个线程?

此外,在运行嵌套循环时,外部和内部循环应该是平行还是仅仅是外部性能?

3 个答案:

答案 0 :(得分:3)

您无法确切知道多少,因此线程数介于1n之间,其中n是要并行运行的任务数(一个线程)可能是顺便执行的当前线程,因为Parallel等待其任务完成)。 Parallel不保证操作同时运行,只是可能。实现您自己的Task Scheduler并在您想要控制使用的线程数时使用它。

如果你想知道并行运行外环和内环是否更好,没有答案。我们不知道你的循环在做什么。在尝试优化循环之前使用性能分析器,因为您可能不知道性能瓶颈在哪里。

答案 1 :(得分:0)

这取决于。 Parallel.For中的嵌套Parallel.For将并行化每个并行化的循环。但是,如果不这样做,那么for循环将完全在同一个线程内执行。绝对要读取MSDN中的并行库。

http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.for.aspx

我会说.Net CLR会对你要做的事情进行一些评估,并生成尽可能多的有意义的线程,但我不能肯定地说。

答案 2 :(得分:0)

TPL将自动确定要使用的线程数,您可以假设它将能够利用所有CPU。

对于循环,它们中只有一个应该是并行的,但哪一个真正取决于每个循环的工作量和大小。如果外部可以是并行的,并且您不需要任何可能更好的并行同步。