我正在閱讀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