2010-11-05 70 views
1

我有一個Java項目,我需要並行運行的東西。我和執行者一起做這件事。事情是,我需要在很多地方使用執行者。我是否應該傾向於傳遞幾個執行者來完成這項工作(暫時忘記限制全局線程數量)還是最好在需要它們的地方創建執行程序?我應該限制我擁有的執行者數量嗎?

回答

0

沒有嚴格的規定會告訴你應該使用多少執行者。有一件事,雖然可以推薦。使用一些依賴注入機制或框架來注入執行器實現。這將允許快速和容易地更換和配置使用過的執行程序。

+0

好的。目前,我正在做類似的事情,但手頭。當你有一個扁平的物體結構時,沒關係。如果你有很深的一面,我認爲你會喜歡有一些框架爲你做,就像你的建議一樣。 – 2010-11-05 13:21:29

3

你真正需要考慮的是控制在你創建的任何Executors上運行的線程數量。

您爲每個執行者創建的線程數將是每個提交任務的到達頻率和預計持續時間(處理時間)的函數。每個邏輯任務類型擁有一個隊列允許您調整執行程序以完成該任務,這樣就不會有比所需更多的線程,並且始終可以跟上預期的任務吞吐量。

如果您的應用程序的所有處理階段之間共享一個單片Executor,則調整起來會更加困難。

SEDA是一種典型的併發模式,它反映了每個處理階段的隊列原理。

在某些情況下,擁有一個共享執行程序是有意義的,比如對於不經常的,臨時的或低優先級的計劃任務。

+0

我的任務在絕大多數時間都不做任何事情,所以不需要限制併發「執行」線程的數量,而且執行的操作也不會太多。但是,如果線程一直在努力工作,我完全同意你的看法。 – 2010-11-05 13:08:39

+0

無論大多數時間他們是否做了大量處理,它仍然歸結爲您是否在乎應用程序中的某種類型的任務是否會延遲接收其他類型的任務。在一天結束時,每個執行者都綁定到一個或多個線程。你很高興這些能夠在不同的任務類型中共享嗎? – Joel 2010-11-05 14:49:01

相關問題