2010-03-29 149 views

回答

31

一個關鍵區別是F-J似乎被設計爲在單個Java虛擬機上工作,而M-R被明確設計爲可在大型機器集羣上工作。這些是非常不同的情況。

F-J提供了將任務分割成若干子任務的設施,以遞歸式的方式;更多層次,現階段「叉間」溝通的可能性,更傳統的編程。不會延伸(至少在紙張上)超出一臺機器。非常適合您的八核。

M-R只做了一個大的分割,映射的分割根本不在對方之間,然後一起縮小了所有的東西。單層,在減少之前不會進行相互分離的通信,並且可以大規模擴展。非常適合利用您的雲份額。

+8

更具體地說,F-J允許工人從彼此的隊列中竊取子任務。如果工作線程位於不同的機器上(這樣就沒有共享內存),這是不可能的。 – finnw 2011-01-21 12:24:57

+2

根據[MapReduce Wikipedia條目](http://en.wikipedia.org/wiki/MapReduce),MR不是必然侷限於單層分叉任務。 – 2013-03-07 01:35:07

+0

在Java上下文之外fork/join和mapreduce之間有什麼區別? – user2001850 2017-01-15 22:09:48

10

有一個關於這個問題的整個科學論文,Comparing Fork/Join and MapReduce

本文比較了三種並行範例的性能,可伸縮性和可編程性:fork/join,MapReduce和混合方法。他們發現,基本上Java fork/join具有較低的啓動延遲並適用於小型輸入(< 5MB),但由於共享內存的大小限制,單個節點體系結構無法處理較大的輸入。另一方面,MapReduce具有顯着的啓動延遲(幾十秒),但對於計算羣集中更大的輸入(> 100MB)很好。

但是,如果你想要閱讀,還有很多東西需要閱讀。