- 我有一個任務可以分成多個獨立的子任務,每個子任務都可以在Java中的一個單獨的線程中運行。
- 我想知道什麼是線程的最佳數量之後增加線程的數量不會導致任何性能增益。
回答
有許多因素在這裏。如果您的任務受CPU限制,則只受處理器/內核數量的限制。如果您的任務傾向於IO綁定,那麼您可能會受益於比處理器/內核更多的線程。多少取決於你的任務花費在IO上的時間,相對於他們花費多少時間來進行實際的計算。
所以,像往常一樣,這取決於你在做什麼。
對於CPU綁定進程,運行線程的數量不應超過內核數量。
最後,您需要嘗試不同的配置並查看最佳效果。
+1:對於一些CPU密集型任務來說,核心數* 2是最優的。通常它只是你說的核心數量,但是如果你對你的代碼進行基準測試,你可能發現double會稍微好一些。再次,它取決於你在做什麼,因爲對於一些任務,最佳數字是1.;) –
當你改變這種配置時,你應該總是測量。你有核心* 2斷言的參考,彼得?我有興趣瞭解哪些類型的任務可能屬於該類別。 –
這只是嘗試所有選項來找到最佳組合的問題。核心* 2來自經驗。 –
入住這post Brian Goetz撰寫,很舊但翔實
- 1. 爲什麼單線程java程序有這麼多的線程?
- 2. 什麼是多線程應用程序?
- 3. 用線程編程有什麼好處?
- 4. mod_wsgi + apache沒有多線程,爲什麼?
- 5. opm多線程有什麼問題?
- 6. 什麼是多線程?
- 7. 時間多線程和超線程之間有什麼區別?
- 8. 爲什麼Delphi應用程序有多個線程?
- 9. C#多線程 - 使用什麼方法?
- 10. 用多線程(無加速度 - 做什麼)計算Pi
- 11. 線程池,多線程,異步等。我應該使用什麼?
- 12. 什麼是內核線程調度?
- 13. 使用線程池和普通線程有什麼區別?
- 14. 內核線程和用戶線程有什麼區別?
- 15. GDI +後臺線程有什麼作用?
- 16. 守護線程什麼時候有用?
- 17. savethread/restore線程有什麼作用?
- 18. java中有多線程的多線程
- 19. 不同步,多線程變成非多線程?那麼爲什麼多線程在第一位呢?
- 20. C#多線程,循環停止所有進度的線程
- 21. uwsgi線程用於什麼?
- 22. 什麼是用戶線程?
- 23. 爲什麼調用線程數比在C程序中執行線程數多?
- 24. 有條件的任務調度 - 多線程Java應用程序
- 25. 在多線程處理中,「預熱」線程究竟是什麼?
- 26. 多線程:什麼時候開始和退出線程
- 27. 爲什麼非線程工作比多線程更快?
- 28. 爲什麼我的多線程執行是單線程模式
- 29. 在多個線程上使用單個io_service有什麼好處?
- 30. 爲什麼在Python中沒有使用多線程的輸出?
受處理器數量限制 – blob
@blob:不,在一般情況下不是。只有當任務受CPU限制時纔是如此。如果他們主要是在執行IO,那麼它不受處理器數量的限制。 –
@布魯諾我同意,發佈了一個提供信息的鏈接,作爲回答 – blob