Plinq的Range分区与Chunk分区?

Roy*_*mir 5 .net c# parallel-processing .net-4.0 plinq

在哪种情况下,范围分区是比分区更好的选择?(和vise诗)

我已经知道了

  • 块分区:从输入到处理抓取小块元素,然后从小块开始,增加块大小.

  • 范围分区为每个工作人员预分配相同数量的元素

另外,为什么这个代码:(找到素数到100000)

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3);
var parallelQuery =    from n in numbers.AsParallel()
                       where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0)
                       select n;
Run Code Online (Sandbox Code Playgroud)

可能会执行不当使用范围划分?

虽然这段代码:(找到第一百万个数字的sqrt之和)

ParallelEnumerable.Range (1, 10000000).Sum (i => Math.Sqrt (i))
Run Code Online (Sandbox Code Playgroud)

使用范围分区会更好的选择吗?

Hen*_*man 5

在第一个样本中,每个项目所需的时间取决于n.在90000之后搜索下一个素数比在11之后找到一个更多的时间.

因此,当划分为相等的范围时,最后的范围将比第一个范围执行更多的工作.

在第二个样本中,每次操作的时间在整个范围内是相等的.因此范围分区将很好地工作.