2012-12-11 94 views
4

我的同事之一是與我爭論在我們的應用程序(文本處理)中引入map-reduce概念。他的觀點是我們不應該使用線程概念的原因。我們都是這種地圖縮減範式的新手。我認爲使用map-reduce概念可以幫助開發人員處理線程同步,死鎖,共享數據的開銷。除了這個之外,還有其他什麼用於映射 - 減少概念而不是線程嗎?線程和Map-Reduce處理之間的區別?

+0

你的處理器有多少核心?這個問題只有在一臺擁有多個可以實際並行執行線程的內核的機器上時纔有意義。 –

+0

@JudgeMental我們擁有多核心的單主機。在這種情況下,線程將會很好。這是你的意思嗎? – udi

回答

2

Map-reduce增加了大量的開銷,但可以用於協調一大羣機器,用於「尷尬平行」的用例。如果你有多個內核並且只有一個主機,線程是唯一值得的,但是有許多框架在原始線程上增加了抽象層(例如Concurrent,Akka),這些框架通常更容易處理。

2

您可以在此找到相關的紙張,Comparing Fork/Join and MapReduce

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

線程提供了將任務劃分爲多個子任務的功能,更多層次,現階段「叉間」溝通的可能性,更傳統的編程。不會延伸(至少在紙張上)超出一臺機器。非常適合您的八核。

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

相關問題