正在浏览Java 8的功能,提到了here。我不能理解parallelSort()到底做了什么。有人能解释一下sort()和parallelSort()之间的实际区别吗
发布于 2013-06-27 02:49:34
并行排序使用threading -每个线程获得列表中的一个块,所有的块都是并行排序的。然后将这些排序的块合并成一个结果。
当集合中有很多元素时,它的速度会更快。在较大的集合上,并行化(拆分成块和合并)的开销变得可以接受,但对于较小的集合来说,它是很大的。
请看下表(当然,结果取决于CPU、内核数量、后台进程等):

取自此链接:http://www.javacodegeeks.com/2013/04/arrays-sort-versus-arrays-parallelsort.html
发布于 2013-06-27 02:48:57
Arrays.parallelSort():
该方法使用一个阈值,并且使用Arrays#sort()
对任何小于阈值的数组进行排序(即顺序排序)。并且阈值是考虑机器的并行度、数组的大小来计算的,并且计算如下:
private static final int getSplitThreshold(int n) {
int p = ForkJoinPool.getCommonPoolParallelism();
int t = (p > 1) ? (1 + n / (p << 3)) : n;
return t < MIN_ARRAY_SORT_GRAN ? MIN_ARRAY_SORT_GRAN : t;
}一旦决定了数组是并行还是串行排序,现在就需要决定如何将数组分成多个部分,然后将每个部分分配给一个负责排序的Fork/Join任务,然后再分配另一个Fork/Join任务来负责合并排序后的数组。JDK 8中的实现使用了这种方法:
您还可以在Javadoc中阅读实现细节
排序算法是一种并行排序-合并算法,它将数组分成多个子数组,子数组本身进行排序,然后合并。当子数组长度达到最小粒度时,使用适当的Arrays.sort方法对子数组进行排序。如果指定数组的长度小于最小粒度,则使用适当的Arrays.sort方法对其进行排序。该算法要求工作空间不大于原始数组的指定范围的大小。ForkJoin公共池用于执行任何并行任务。
Array.sort():
这使用合并排序或下面的Tim排序对内容进行排序。这一切都是按顺序完成的,尽管合并排序使用了分而治之的技术,但它都是按顺序完成的。
Source
发布于 2013-06-27 02:57:43
这两种算法的主要区别如下:
1. Arrays.sort():顺序排序。
2. Arrays.ParallelSort():是一种并行排序。
API使用多线程。
与
为了获得更多的结果,我想我们都必须等待JAVA 8!干杯!!
https://stackoverflow.com/questions/17328077
复制相似问题