2011-08-24 53 views
0
  • 我有一個任務可以分成多個獨立的子任務,每個子任務都可以在Java中的一個單獨的線程中運行。
  • 我想知道什麼是線程的最佳數量之後增加線程的數量不會導致任何性能增益。
+0

受處理器數量限制 – blob

+0

@blob:不,在一般情況下不是。只有當任務受CPU限制時纔是如此。如果他們主要是在執行IO,那麼它不受處理器數量的限制。 –

+0

@布魯諾我同意,發佈了一個提供信息的鏈接,作爲回答 – blob

回答

5

有許多因素在這裏。如果您的任務受CPU限制,則只受處理器/內核數量的限制。如果您的任務傾向於IO綁定,那麼您可能會受益於比處理器/內核更多的線程。多少取決於你的任務花費在IO上的時間,相對於他們花費多少時間來進行實際的計算。

所以,像往常一樣,這取決於你在做什麼。

對於CPU綁定進程,運行線程的數量不應超過內核數量。

最後,您需要嘗試不同的配置並查看最佳效果。

+0

+1:對於一些CPU密集型任務來說,核心數* 2是最優的。通常它只是你說的核心數量,但是如果你對你的代碼進行基準測試,你可能發現double會稍微好一些。再次,它取決於你在做什麼,因爲對於一些任務,最佳數字是1.;) –

+0

當你改變這種配置時,你應該總是測量。你有核心* 2斷言的參考,彼得?我有興趣瞭解哪些類型的任務可能屬於該類別。 –

+0

這只是嘗試所有選項來找到最佳組合的問題。核心* 2來自經驗。 –

0

入住這post Brian Goetz撰寫,很舊但翔實

相關問題