PLINQ OrderBy的工作原理

时间:2016-02-29 12:26:20

标签: c# arrays multithreading linq sorting

我想实现自己的多线程排序算法,但是当我将其与单线程Array.Sort进行比较时,我得到64MB随机数组的结果:16秒 - PLINQ,27秒 - 我的实现,70秒 - {{ 1}}。显然PLINQ更快,所以我应该提高我的认识来克服PLINQ的问题。我正在使用数组,我知道它,当PLINQ使用Array.Sort作为源时,因此它无法对集合大小做任何假设等等(并将此知识转换为性能提升)。

现在我发现PLINQ生成N个分区(N = Environment.ProcessorCount),然后生成多个帮助器和IEnumerable<T> s(方法Barriersee on referencesource),但我不知道了解当时发生的事情。为什么需要这个障碍,实际如何排序,为什么它使用分区......每个分区都可以排序,但不能保证整个数组都是有序的。也许它按照某种顺序合并它们,但是怎么样?我在这个兔子洞里真的很深,但仍然混淆了发生了什么。

实际排序在此处执行:

SortHelper<TInputOutput, TKey>.GenerateSortHelpers

从所有线程调用它,最后我们得到排序输出。

0 个答案:

没有答案