Arrays.sort()和Arrays.parallelSort()之间的区别

正在阅读这里提到的Java 8function。 无法理解parallelSort()确切作用。 有人可以解释sort()parallelSort()之间的实际区别是什么?

并行排序使用线程 (每个线程获取列表的一部分并将其并行排序。稍后这些排序的块将合并到一个结果中)。

当集合中有很多元素时,它会更快。 并行化的开销在较大的arrays上变得相当小,但对于较小的arrays而言则很大。

看看这个表(当然,结果取决于CPU,核心数,后台进程等):

在此处输入图像描述

取自以下链接: http : //www.javacodegeeks.com/2013/04/arrays-sort-versus-arrays-parallelsort.html

Arrays.parallelSort():

该方法使用阈值,并且使用Arrays#sort()API(即顺序排序)对小于阈值的任何大小的数组进行排序。 并且考虑到机器的平行度,arrays的大小来计算阈值,并计算为:

 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 /加入任务,负责合并排序的数组。 JDK 8中的实现使用了这种方法:

  • 将arrays分为4个部分。

  • 对前两个部分进行排序,然后合并它们。

  • 对接下来的两个部分进行排序然后合并它们。 并且对每个部分递归地重复上述步骤,直到要排序的部分的大小不小于上面计算的阈值。

您还可以在Javadoc中阅读实现细节

排序算法是并行排序合并,它将数组分解为自身排序然后合并的子数组。 当子arrays长度达到最小粒度时,使用适当的Arrays.sort方法对子arrays进行排序。 如果指定数组的长度小于最小粒度,则使用适当的Arrays.sort方法对其进行排序。 该算法要求工作空间不大于原始数组的指定范围的大小。 ForkJoin公共池用于执行任何并行任务。

中的Array.sort():

这使用合并排序或下面的Tim Sort来对内容进行排序。 这是按顺序完成的,即使合并排序使用分而治之的技术,它们都按顺序完成。

资源

两种算法的主要区别如下:

1. Arrays.sort() :是一个顺序排序。

  • API使用单线程进行操作。
  • API需要更长的时间来执行操作。

2. Arrays.ParallelSort() :是一个并行排序。

API使用多个线程。

  • 与Sort()相比,API花费的时间更少。

为了获得更多结果,我们都必须等待JAVA 8我猜! 欢呼!!

你可以参考javadoc ,它解释了如果数组足够大,算法会使用多个线程:

排序算法是并行排序合并,它将数组分解为自身排序然后合并的子数组。 当子arrays长度达到最小粒度时,使用适当的Arrays.sort方法对子arrays进行排序。 […] ForkJoin公共池用于执行任何并行任务。

简而言之, parallelSort使用多个线程。 如果你真的想知道,这篇文章有更多细节。

从这个链接

Java Collections Framework(Collections.sort和Arrays.sort)提供的当前排序实现都在调用线程中顺序执行排序操作。 此增强function将提供当前由Arrays类提供的同一组排序操作,但具有使用Fork / Join框架的并行实现。 这些新的API在调用线程方面仍然是同步的,因为在并行排序完成之前它不会继续进行排序操作。

Array.sort(myArray);

你现在可以使用 –

Arrays.parallelSort(myArray);

这将自动将目标集合分成几个部分,这些部分将在多个核心中独立排序,然后重新组合在一起。 这里唯一需要注意的是,当在高度multithreading的环境中调用时,例如繁忙的Web容器,由于增加了CPU上下文切换的成本,这种方法的好处将开始减少(超过90%)。

来源链接

Arrays.sort()使用单个Thread对元素进行排序,但Arrays.ParallelSort()将使用多个线程。
与普通排序相比,parallelsort将花费更少的时间。