我有一個線程池有10個線程和大量的文本數據處理,我正在並行運行這些線程,我無法利用核心i7博銳處理器的完整cpu resorce,有人幫我解決這個問題。我想要最大的CPU利用率。四核處理器運行超過8個線程
回答
大多數情況下,您的開銷可能比CPU利用率更高。
- 這可能是因爲讀取文件並將其分解爲句子需要時間。由於你沒有看到100%的CPU,這是我的猜測。
- 向其他線程啓動和添加任務的開銷大於每個任務的工作量。您預計接近100%的CPU使用率,但速度遠遠低於您的預期。它甚至可能比使用一個線程慢。
除非您的JVM預熱,否則您可能會發現這比使用多線程更有用。 (100個句子文件將不夠接近)
我甚至有500個句子文件,同樣的情況也是如此,整個過程涉及到將文本翻譯成6種不同的語言 –
在這種情況下,我會翻譯一種語言每個線程,一個線程讀取到句子。這應該是CPU密集型的。我假設你正在使用Java進行翻譯而不使用任何外部資源或服務。 –
如果每個線程也應該從文件中讀取句子並處理它,那麼我懷疑磁盤在這種情況下是瓶頸。從單個磁盤進行並行讀取通常會導致單次順序讀取性能下降。
在我看來,你應該把所有東西都留給一個線程,或者至少使用一個生產者 - 多個消費者模式來串行化閱讀和並行處理句子處理。
在許多情況下,不是在每個執行單獨作業的線程中執行相同的操作,而是使用同步的隊列進行通信,以獲得更好的結果。嘗試拆分應用程序,以便所有讀操作都是從單個線程完成的,然後將數據提供給工作線程進行處理,而另一個線程進行後處理(如果有)。你可能會發現這種模型使用更多的處理能力,並且工作速度明顯加快。
多線程會帶來一些開銷,從細分作業中的任務,將作業提交到作業隊列,然後讓ThreadPoolExecutor
執行作業,可能在完成時組合結果。即使沒有因磁盤訪問或其他共享資源而引起的爭用,我發現將作業細分爲小於1毫秒也不值得。在具有多個套接字的大型機器上運行時,由於緩存一致性開銷增加,該閾值甚至更高。
- 1. 同時處理超過64個線程
- 2. 在處理器內核上如何執行多個線程
- 3. 多核處理器上的多線程
- 4. 多核處理器的多線程
- 5. 多核心處理器中的線程
- 6. PBS(扭矩)不考慮四核處理器作爲4個處理器
- 7. 四核處理器的筆記本電腦中的Java多線程
- 8. 只能在一個處理器上進行運行只能在其他處理器上運行線程嗎?
- 9. 爲什麼單個線程進程在多個處理器/內核上執行?
- 10. 線程運行中的處理程序
- 11. 具有單核處理器和多核處理器的單線程代碼的多線程代碼
- 12. 多核處理器上當前正在運行的線程是什麼?
- 13. Java多線程 - 分配線程到處理器核心
- 14. 處理器中每個內核的線程數
- 15. 在單核機器上運行3個並行線程
- 16. 產生在四核處理器上構建內核的多個作業?
- 17. 四核上的Linux:單個可執行文件,四個進程
- 18. 哪個線程做backgroundworker完成事件處理程序運行?
- 19. 使用單核的Android線程處理
- 20. 多核處理器中的多線程應用程序
- 21. 單對多線程的單核處理器的編程
- 22. 並行運行單元測試超過五個核心
- 23. 如何處理運行線程的定時器
- 24. 多處理線程池關閉,超時
- 25. 我怎樣才能找到每個線程在哪個處理器上運行?
- 26. 我真的需要四核處理器來安裝SharePoint 2010嗎?
- 27. 在一個進程中創建的posix線程可以跨兩個物理處理器並行運行嗎?
- 28. 通過線程池處理器相關性和線程創建
- 29. Shell,運行四個並行進程
- 30. 並行處理N個線程? (更新)
有點代碼會有助於回答這個問題。 –
爲什麼爲什麼爲什麼?一個100行字的文本文件不需要8個線程來處理。你在浪費資源和做傻事。 STAHP –
將100個句子翻譯成6種不同的語言,並對文字執行字數統計操作 –