ParallelQuery核心平衡

时间:2013-01-24 01:04:23

标签: c# parallel-processing plinq

我有200,000个任务将并行运行以提高速度。我正在使用ParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ )

当任务计数器从0到200,000时,所需的迭代次数减少。 a=0的任务需要大多数迭代,而a>100,000的任务完成一次迭代或没有迭代。

由于这个原因,我的四核机器在任务进展时没有达到最大CPU利用率峰值。似乎工作负载在启动时分配给所有4个核心,并且一些核心更早地处于空闲状态,因为它们的部分主要是具有高a s的任务。 cpu利用率从100%开始,但逐渐下降到75~50~25%。如何从头到尾实现完整的cpu利用率?

1 个答案:

答案 0 :(得分:0)

非常简单的自我回答:用ParallelEnumerable.Range(0, 200000)替换Enumerable.Range(...).AsParallel()足以解决此问题。似乎工作负载在Enumerable.Range(...).AsParallel()中动态分配。