我在java彈簧中有一個應用程序。該應用程序需要多線程。所以我使用可調用的&執行器服務,因爲每個線程都會返回一些字符串值。 所以我的問題是如何決定可以保留的最大線程數? 而重要的問題是,如果我繼續增加線程數量,但照顧堆大小的條件,是否會在線程數超過某個限制後開始降低性能?增加線程數是否會降低java的整體性能?
0
A
回答
1
那麼,這樣的問題的最佳答案是「這取決於」。但我可以肯定地指出,它取決於什麼:)
- 你在一個線程中所做的工作。
- 代碼是否已經在利用底層硬件的並行特性?
- 整個代碼是否存在瓶頸,比並行任務需要更多時間?
在JVM中獲取線程基礎結構是一個代價高昂的過程,當您談論線程時,同步也會出現。讓我們暫時忘記同步。即使如此,如果執行的任務比分配和管理線程的開銷更低,我會說嚴格的NO到多線程。
事情是多線程證明是一個福音是當你的首要任務是使網絡電話,有許多這樣的任務。
另一個這樣的要求是做一些獨立的計算,如塊式矩陣乘法。
注意:編譯器現在是一個天做了一些優化,以提高你的代碼的並行處理能力。但以正確的方式編碼的更大責任取決於您。
例如:考慮下面的代碼在數組中添加10個數字。
這似乎是添加數組元素的最佳方法。但低於實際利用處理器的並行處理能力:
total = a[0] = a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9];
明智的選擇:)
3
找出使用多少個線程的最好方法是憑經驗。但你可以預先猜測;如果你正在做大量的阻塞IO,你會想要更多的線程。如果你根本沒有做任何IO,而只是使用CPU,那麼你理想的情況是不需要比內核多的線程。您還必須考慮同步開銷,如果您需要大量同步,那麼在多線程上運行該代碼很可能不會提高性能。
同樣,它在很大程度上取決於應用程序。這些都只是經驗法則,你將不得不執行更詳細的分析和一些測試運行實際上能夠告訴你的應用程序。
0
簡單的答案是肯定的,因爲線程之間的交換是相當昂貴的。您必須在換出正在等待的線程和其他線程可以獲得某些CPU以及交換費用之間取得平衡。
例如,如果你有100個comsumer線程典型的生產者,我懷疑的吞吐量會比如果你有10
0
最有可能的是,這會降低整體性能要大得多。以下是一些需要考慮的事實:
- 在大多數情況下,由於CPU /內核數量有限,可以同時運行的線程數量有限;
- 將一個線程與
WAITING
狀態一起激活一些其他線程(這是所謂的context switching
的一部分)在CPU資源方面相當昂貴; - 有Amdahl定律它提供了問題的答案 - 線程數,CPU,部分「工作」之間的關係可以同時完成併產生加速。這裏很難發佈公式,所以我只留下wiki page link。
相關問題
- 1. 增加塊大小會降低性能
- 2. Ajax是否會降低性能?
- 3. log.debug是否會降低性能
- 4. #defines是否會降低性能?
- 5. Java安全管理器是否會降低性能?
- 6. 使用PNG是否會降低Android應用程序的性能?
- 7. 額外的數據是否會降低Python對象的性能?
- 8. 內嵌JavaScript事件是否會降低網頁加載性能?
- 9. n層體系結構是否會降低應用程序性能
- 10. WPF:窗口大小增加會降低性能
- 11. 嵌套select子句是否會降低數據庫性能?
- 12. 在什麼情況下Java性能會隨着內存的增加而降低?
- 13. SmtpClient.SendAsync是否降低或提高性能?
- 14. 是否太多symfony中的服務會降低其性能?
- 15. 事務塊是否會降低SQL Server的性能?
- 16. 空的.ctor和.dtor是否會降低性能?
- 17. 爲什麼添加線性迴歸功能會降低精度?
- 18. 隨着「IN」子句中的數字元素增加,SQL性能是否會降低?
- 19. 向MySQL引入外鍵是否會降低性能
- 20. 在MySql中使用IN運算符是否會降低性能?
- 21. 生活時間(ttl)是否會影響或降低性能?
- 22. 在PHP中包含太多文件是否會降低性能?
- 23. 分區是否會降低查詢性能?
- 24. 調用方法是否會降低性能?
- 25. Do Views是否會降低LINQ查詢性能?
- 26. 多線程是否會降低運行時間?
- 27. Web服務增加安全性並降低性能?
- 28. Vim滾動性能是否會降低垂直分割窗口的性能?
- 29. .ajax問題,降低了IE的整體性能
- 30. Java性能降低鎖的移除
大概。最好的方法是嘗試;) – Tedil
「Java併發實踐」中的「8.2。調整線程池」一節有關於此主題的有用信息http://books.google.ru/books?id=EK43StEVfJIC&pg=PT186&lpg = PT186&dq = Sizing + Thread + Pools + java + concurrency + in + practice&source = bl&ots = un0Gx2sRlr&sig = q6gBylm5pFXWgdyB3bV6KcIQUsI&hl = en&sa = X&ei = LsRkU4vDHcGN4ATvx4C4Dw& ved = 0CEkQ6AEwBA – ka3ak