我正在阅读Richard Warburton编写的Java 8书籍。下面是引用我不明白:流中的叶子工作是什么?
让我们假设流框架分手了我们的工作 并行的四核机器上运行:
我们的数据源分解为四个元素块。
我们进行叶计算工作在每个线程并行[...]
什么是叶计算工作?它应该是什么意思?
我正在阅读Richard Warburton编写的Java 8书籍。下面是引用我不明白:流中的叶子工作是什么?
让我们假设流框架分手了我们的工作 并行的四核机器上运行:
我们的数据源分解为四个元素块。
我们进行叶计算工作在每个线程并行[...]
什么是叶计算工作?它应该是什么意思?
作者使用树叶类比来解释并行流中的工作细分。
想想整个工作需要以树的形式完成。树干代表整个工作;每个分支代表可以进一步细分的部分工作;每片叶子表示未再细分的工作量。
考虑将8个元素的数组合并排序为例。排序元素0..7是主干。它有两个分支,用于分类范围0..3和4..7。反过来,每个分支有两个叶子来排序两个元素范围。
由于分选两元素范围的工作不再细分,所以它被认为是叶。
尽管排序示例有点让人误解,但它需要一个非平凡的合并步骤(因此,两个非叶节点并行运行,尽管它们不能使用全部四个核心,这一点很重要)。显然,原始资源使用了一个更简单的求和示例。 – Holger
@Holger确实如此。我挑选了排序,以便我的树看起来不像布什:-) – dasblinkenlight
那么,OP没有足够的引用,所以我搜索了原始示例,发现它着眼于细分为“CPU核心数”叶像Stream实现一样,但巧合的是也有四个叶节点,每个叶节点总结1/N个元素,然后有一个微不足道的合并步骤。 ('listOfInteger .parallelStream().mapToInt(i - > i).sum()') – Holger
我假设它指的是处理单元,其获得由单个线程处理,而不是被分解成更小的块的最小数据块的工作。 – Eran