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