我已經開始使用fj JAVA框架。
據我瞭解,它只是分裂算法計算這樣的大任務,並將其分爲 小線程。
問題是如果它值得在單處理器機器上使用這個框架。
謝謝在單處理器上使用Java fork連接框架
回答
書面Oracle文檔JAVA FORK/JOIN在:
的fork/join框架是ExecutorService的界面,幫助你把多個處理器的優勢的實現。它被設計用於可以遞歸地分解成小塊的工作。目標是使用所有可用的處理能力來提高應用程序的性能。
所以它的主要目標是多處理器架構。
如果有大量的IO操作,多線程在單核處理器上仍然很有用。否則它甚至會受傷。
單個處理器(單個單核處理器)號不能利用多個線程,因爲它只能在一次運行一個線程。實際上,線程管理的開銷會使您的計算速度下降一點。
相關:您可以在運行時獲取應用程序可用的處理器數量。見Runtime.availableProcessors()
。
當第一個線程由於某種原因進入休眠狀態時,第二個線程就可以開始執行了。單核CPU上的多線程可能有優勢。 –
我不認爲我在跟隨你的想法。是的,你說的是真的。然而,我無法構成一個例子,這將有助於將單個任務分解爲多個線程。 –
@Slanec這發生在一個線程必須等待IO操作完成;就像等待從磁盤讀取數據一樣。多線程有助於單核取決於任務。作爲多線程幫助考慮編譯大量源文件的例子。 –
通常在運行時使用處理器的數量來確定執行的配置。
即使您有一臺核心機器,您也許有能力在一次執行多個線程,因此您可以使用f.e.的fork-join。 如果你真的在你的cpu上只有一個執行線程,那麼與簡單執行相比,使用多線程框架會產生很小的開銷。另一方面:如果你在一臺核心機器上編寫你的應用程序並且沒有從中獲利,那麼你可能稍後可以使用不同的機器,或者將應用程序交給具有多核/線程機器的用戶。如果沒有再次構建應用程序或更改任何內容,那麼您可以使用該功能。
所以它真的取決於您期望現在和未來使用您的應用程序的方式。
每個處理器有一個線程調度器可以分配的時間來一個單一線程做它的工作。所以如果你有100個線程和一個處理器,調度器將在這100個線程之間切換。但是,據說,在單個處理器上使用多個線程沒有任何優勢,因爲正如我所描述的那樣,它發生的實際情況是調度器只是在非常快的線程之間切換。另外,從CPU的角度來看,上下文切換非常緩慢。
我_這是我寫的。當然你可以有多個線程。但處理器一次只能運行一個(並在它們之間切換,這是導致我提到的開銷)。無論如何,在多線程上運行計算永遠不會比在單線程中運行速度快,是嗎? –
是的,對不起,你肯定是對的。我可能會急於閱讀那裏的線條。 –
- 1. java fork -join框架如何將任務分配到處理器上?
- 2. 有沒有用於Java 1.5的fork連接框架的backport-util?
- 3. Tornado Web框架Mysql連接處理
- 4. 使用jdk 7的新fork連接框架的性能問題
- 5. Java事件處理框架
- 6. Java圖片處理框架
- 7. Java 7:叉/連接框架
- 8. 關於fork-join框架
- 9. 在機架中處理WebSocket連接
- 10. 用於Java的異常處理框架
- 11. 在java中處理異常的框架
- 12. 每個連接在播放框架2中如何處理?
- 13. 實體框架在使用SqlQuery時如何處理連接<T>
- 14. 在Android上處理相機框架
- 15. 如何使用Java 8的Fork/Join框架並行化循環
- 16. 如何在實體框架中使用DbModelBuilder時管理連接?
- 17. java API或隊列處理框架
- 18. java中的並行處理框架
- 19. JMS與JPPF(Java並行處理)框架
- 20. 實體框架 - 處理沒有來自連接表的記錄的連接
- 21. Multipeer連接框架不再連接
- 22. 用於Java的數據抽象或數據連接器框架
- 23. 在背景框架上使用Java KeyListener
- 24. 處理在Zend框架1
- 25. 我是否處理好數據庫連接(實體框架)?
- 26. 關於處理實體框架中的連接問題
- 27. spring批處理框架需要多少個jdbc連接
- 28. Facebook連接框架(X框架選項)
- 29. iOS 7:Multipeer連接框架
- 30. 錯誤處理使用無框架
我明白多線程的優點,但問題是如果用於將大任務分割爲小子任務的FJ可以幫助 –
那麼,如果任務包含大量的IO操作,那麼我的答案是相關的。 – popfalushi
但是爲這個使用FJ還是值得的,或者最好創建一個執行IO的單獨線程? –