多线程快速排序或合并排序
如何为 Java 实现并发快速排序或合并排序算法?
我们在16(虚拟)核Mac上遇到过问题,其中只有一个内核(!)使用默认的Java排序算法工作,而且看到这台非常精细的机器完全未得到充分利用是不好的。所以我们写了我们自己的(我写的),我们确实获得了很好的加速(我写了一个多线程的快速排序,由于其分区性质,它并行化得很好,但我也可以写一个合并排序)......但是我的实现最多只能扩展到4个线程,它是专有代码,我宁愿使用来自信誉良好的来源的线程,而不是使用我重新发明的轮子。
我在Web上找到的唯一一个是如何在Java中编写多线程快速排序的示例,它是忙碌循环(这真的很可怕)使用:
while (helpRequested) { }
http://broadcast.oreilly.com/2009/06/may-column-multithreaded-algor.html
因此,除了无缘无故地丢失一个线程之外,它还确保通过在那个 while 循环中忙于循环来杀死性能(这令人难以置信)。
因此,我的问题是:您是否知道Java中任何正确的多线程快速排序或合并排序实现,这些实现将来自信誉良好的来源?
我强调这样一个事实,即我知道复杂性保持在O(n log n)上,但我仍然非常喜欢看到所有这些内核开始工作而不是空转。请注意,对于其他任务,在相同的16个虚拟内核Mac上,我看到通过并行化代码加速了x7(我绝不是并发方面的专家)。
因此,即使困难的复杂性也保持在O(n log n)中,我真的很感激x7或x8甚至x16加速。