[英]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.