6

我想在Windows Azure的Worker進程中使用TPL。我期待添加一個IJob隊列,這有一個Run方法,所以工作人員將包括:TPL中的最大任務?

環 獲取項關閉隊列 使用TPL調用IJob.Run,​​這是一個異步調用

但我有點擔心我可以添加到TPL的最大物品?我很高興根據需要建立我自己的TPL Pool,只需檢查它的功能。

乾杯, 灰。

回答

9

TPL的主要目標之一是消除需要擔心這一點。通過將工作分解爲任務而不是線程,您可以讓調度程序更好地處理這種平衡。

您可以安排的「任務」數量沒有固定的上限。它們是(默認情況下,使用默認的TaskScheduler)使用ThreadPool進行調度,它基於.NET 4進行擴展。我強烈建議不要試圖建立你自己的游泳池 - 你很可能會做得比默認好。話雖如此,如果你的任務有一個非標準的行爲,你可能要考慮編寫一個自定義的TaskScheduler。

另外 - 意識到你應該在理想情況下讓你的任務「儘可能大」。與單個任務相關的開銷 - 如果它們太小(就工作而言),會導致開銷對性能產生較大的影響,如果您擁有適當數量的較大「任務」。

+1

「Task」太大也可能是一個問題,因爲它可能會延遲其他Task的處理。所以,對於大型的Task,你可能會獲得更好的吞吐量,但延遲更差。 – svick 2012-06-19 12:17:04