繁体   English   中英

在多个线程中划分合并排序算法

[英]Dividing a Merge Sort algorithm in multiple threads

我正计划构建一个使用Java中多个线程的合并排序算法,并且我已经遍及Internet和SO(例如, 多线程合并排序算法 ),但我似乎无法解决某些问题我的问题。

首先,创建的最佳线程数是否与CPU的内核数相同? 考虑线程数时,我是否应该考虑逻辑核心?

其次,在这种算法中实现多线程的最佳方法是什么? 我听说有多种方法可以做到这一点(例如从“ Thread”类继承或使用Runnable实现等)。

此外,就优化而言,在这种情况下,使用ArrayLists或LinkedLists是更好的选择吗?

任何其他有关实现的注释/建议均应赞赏。

干杯。

在Java 8中,如果您请求parallelStream与之parallelStream ,则Stream API也将使用Arrays.parallelSort() 如果您出于教育目的而研究parallelSort的源,则应该提供很多信息。

...创建的最佳线程数是否与CPU的内核数相同?

我会这样认为。 合并排序应受内存带宽限制,而不是cpu带宽限制。 早期从多线程获得的主要收益将利用每个内核的本地缓存,通常是1级和2级缓存。 通常,三级缓存是在内核之间共享的,因此,与三级缓存的速度相比,如果合并进程受CPU限制,则唯一的好处是。 一旦运行大小变得足够大以超过缓存限制,那么我不确定多线程会带来多少好处。

微软的stable_sort首先使用插入排序来创建32个元素的排序组,这可能是为了利用本地缓存。 我不确定这是否对当前的处理器有用,因为它基于1994年编写的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM