【发布时间】:2011-02-18 07:19:52
【问题描述】:
为什么 PLINQ 输出不同于顺序处理和 Parallel.For 循环
我想添加 10,000,000 个数字的平方根之和。这是 3 种情况的代码:
顺序for循环:
double sum = 0.0;
for(int i = 1;i<10000001;i++)
sum += Math.Sqrt(i);
这个输出是:21081852648.717
现在使用 Parallel.For 循环:
object locker = new object();
double total ;
Parallel.For(1,10000001,
()=>0.0,
(i,state,local)=> local+Math.Sqrt(i),
(local)=>
{
lock(locker){ total += local; }
}
);
这个输出是:21081852648.7199
现在使用 PLINQ
double tot = ParallelEnumerable.Range(1, 10000000)
.Sum(i => Math.Sqrt(i));
这个输出是:21081852648.72
为什么 PLINQ 输出与 Parallel.For 和 Sequential for 循环之间存在差异?
【问题讨论】:
标签: parallel-processing task-parallel-library plinq parallel-extensions