我正在阅读this question,以了解Java的 Arrays.sort
和 Arrays.parallelSort
之间的区别,这已经有几年了。令我惊讶的是,只有一个问题提到了使用parallelSort
的任何缺点;也就是说,如果您使用大量CPU,则速度会降低。
假设您不在某种专门的单线程环境中,应该总是选择parallelSort
吗?有没有理由不这样做?请注意,上述问题的答案之一是,如果元素少于4096个,则parallelSort
仍会简单地调用sort
。
最佳答案
使用Arrays.parallelSort
有一些缺点
ForkJoinPool.commonPool()
并会与默认情况下使用它的其他函数(例如流中的parallel()
)进行战斗Arrays.parallelSort
使用的ArrayList
stay empty for their whole lifetime可以节省大量内存和CPU时间,因为不实例化永远不会填充的数组)还有一个有趣的场景:说出您是否实现了一些需要分类的纸牌游戏。它非常容易并行地并行执行多个游戏执行,而不是并行执行一次运行的排序机制,而排序机制可能只占整个游戏循环的一小部分。您失去了现在进行并行化的简单方法(例如,在遗传算法的背景下运行游戏时)。
但是,是的,如果碰巧有大数组,并且排序是应用程序运行时的重要部分,请使用
Arrays.parallelSort
。编辑:
并且即使给定数组的元素少于4096,即使
Arrays.parallelSort
转换为常规排序:这都是为了显示意图-如果可能,您需要并行排序,其含义与调用sort
不同。而且要挑剔:在小型阵列上确实确实表现较差,因为它必须进行额外检查,以检查该阵列是否包含少于4096个元素,以及其他一些有关公共(public)池线程数的检查(当然,开销可以忽略不计):) 。关于java - 有没有理由不使用Java 8的parallelSort?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56841334/