我有一個Java項目,我需要並行運行的東西。我和執行者一起做這件事。事情是,我需要在很多地方使用執行者。我是否應該傾向於傳遞幾個執行者來完成這項工作(暫時忘記限制全局線程數量)還是最好在需要它們的地方創建執行程序?我應該限制我擁有的執行者數量嗎?
回答
沒有嚴格的規定會告訴你應該使用多少執行者。有一件事,雖然可以推薦。使用一些依賴注入機制或框架來注入執行器實現。這將允許快速和容易地更換和配置使用過的執行程序。
你真正需要考慮的是控制在你創建的任何Executors上運行的線程數量。
您爲每個執行者創建的線程數將是每個提交任務的到達頻率和預計持續時間(處理時間)的函數。每個邏輯任務類型擁有一個隊列允許您調整執行程序以完成該任務,這樣就不會有比所需更多的線程,並且始終可以跟上預期的任務吞吐量。
如果您的應用程序的所有處理階段之間共享一個單片Executor,則調整起來會更加困難。
SEDA是一種典型的併發模式,它反映了每個處理階段的隊列原理。
在某些情況下,擁有一個共享執行程序是有意義的,比如對於不經常的,臨時的或低優先級的計劃任務。
我的任務在絕大多數時間都不做任何事情,所以不需要限制併發「執行」線程的數量,而且執行的操作也不會太多。但是,如果線程一直在努力工作,我完全同意你的看法。 – 2010-11-05 13:08:39
無論大多數時間他們是否做了大量處理,它仍然歸結爲您是否在乎應用程序中的某種類型的任務是否會延遲接收其他類型的任務。在一天結束時,每個執行者都綁定到一個或多個線程。你很高興這些能夠在不同的任務類型中共享嗎? – Joel 2010-11-05 14:49:01
- 1. sql-server我應該使用哪個擁有者?
- 2. 我應該大寫我的常量嗎?
- 3. MySQL性能 - 選擇一行,我應該使用限制1嗎?
- 4. 我應該擁有哪個Facebook按鈕?
- 5. 我應該使用接口來強制執行泛型嗎?
- 6. 如果我將其限制爲一個,我應該檢查多行嗎? (mysqli)
- 7. 我應該限制ipad的portraitupdsidedown模式
- 8. 我應該從方法中拋出異常的數量是否有限制?
- 9. 我應該在瀏覽器內存中緩存多少數據有限制嗎?
- 10. 我應該通過數據庫錯誤強制執行業務邏輯嗎?
- 11. 我應該如何在氣流中使用正確的擁有者任務?
- 12. 我應該限制嘗試登錄rails嗎?
- 13. 圖形限制 - 我應該使用裝飾器嗎?
- 14. RExcel有用嗎?或者我應該尋找替代品
- 15. Ruby on Rails和WebSphere我可以同時擁有兩者嗎?
- 16. 我應該儘量減少控制器中的接口數量嗎?
- 17. boost shared_ptr獲取擁有者數量
- 18. 我應該如何操作Laravel數據庫遷移數據?或者我應該在別的地方去做嗎?
- 19. 我應該首先收集文件,然後執行任務,或者我應該在收集時執行任務嗎?)
- 20. Oracle:我應該使用複製嗎?
- 21. 我應該在我的查詢中執行方程式,或者在本地執行方程式並更新db
- 22. 我的基於web的應用程序應該是我api的消費者嗎?
- 23. 我應該在Git Flow中擁有長期的功能分支嗎?
- 24. 爲什麼我的OS X文件可執行;我應該改變它嗎?
- 25. 我應該使用Request.Params而不是顯式地執行Request.Form嗎?
- 26. JUnit:我應該在assertNotNull後執行空檢查嗎?
- 27. 我應該爲每個用戶(擁有數百萬用戶)存儲90行數據嗎?
- 28. 我應該用制定者/吸氣類我讓他們
- 29. yum存儲庫中可以擁有的rpm數量限制
- 30. 我應該使用什麼權限給android notitications的接收者?
好的。目前,我正在做類似的事情,但手頭。當你有一個扁平的物體結構時,沒關係。如果你有很深的一面,我認爲你會喜歡有一些框架爲你做,就像你的建議一樣。 – 2010-11-05 13:21:29