2013-10-13 152 views
9

我目前正在研究依賴許多不同Web服務來獲取數據的應用程序。因爲我想模塊化每個服務並且在那裏有一點依賴(service1必須在服務2和3之前運行等),所以我在運行每個服務的時候都有自己的任務。有多少任務太多?

任務本身既不

  1. 運行積極,這意味着他們將自己的請求發送到Web服務,並正在等待迴應或處理響應

  2. 等待(通過監測和超時) - 一旦任務完成所有等待任務,喚醒並檢查其依賴關係是否已完成

現在,系統是runni用我稱之爲好的性能(尤其是因爲性能是微不足道的) - 但是,應用程序產生了許多任務。

所以,對於我的問題:在這種情況下~200個任務太多了嗎?他們是否產生了這麼多的開銷,以至於基本上沒有線程的方法會更好?

+0

這可能取決於(1)必須完成的任務和(2)模塊的粒度。 –

+0

這些任務大多隻向web服務發送請求,即發送twitter請求的請求,並進行非常小的處理(過濾器推文)。我爲每個項目開始一項新任務,這意味着大約1-30項任務「同時」運行,而不是等待依賴性---通常每個Web服務約有一個模塊(目前總共約有10-15個模塊)。 – Scurals

+0

在我看來,這是可行的,因爲「運行」僅僅意味着等待服務器的響應...... –

回答

10

一般的答案是「測量,測量,測量」:)如果您沒有遇到任何性能問題,則不應該開始優化。

我想說200個任務都很好。與線程相比,任務之美是與「真實」線程甚至線程池相比,其開銷較低。 TaskScheduler確保所有硬件線程儘可能地利用最少量的線程切換。它通過各種技巧來完成這項工作,如連續運行子任務,從其他線程的隊列中竊取工作等等。

您也可以給的TaskScheduler一些提示什麼具體的任務會如果你想一些數字,看看這篇文章,你可以看到通過TaskCreationOptions


做的,第三方物流是相當在便宜的開銷
http://www.palmmedia.de/Blog/2010/1/19/net-40-performance-of-task-parallel-library-tpl

而言這是關於這個問題的另一個有趣的文章
http://msdn.microsoft.com/en-us/magazine/cc163552.aspx

+1

「另一個有趣的文章」已經死了 - 你還記得它提到的是什麼嗎? – Default