2011-12-18 53 views
0

我經常遇到我想要獨立執行大量小操作的情況。在這些情況下,與每個操作的實際時間相比,操作的數量非常大,因此即使GCD開銷通常較低,由於開銷,簡單地爲每個操作創建任務也是不適當的。如何確定GCD或類似項目的適當數量的任務?

所以你想要做的是將操作的數量分成好的塊,其中每個任務在塊上操作。但是,我怎樣才能確定適當數量的任務/塊?

回答

0

測試和分析。什麼是有道理的,什麼是有效的應用程序特定。

基本上你需要兩件事情決定:

  1. 工作進程/線程數生成
  2. 的塊的大小,他們將在

播放工作與兩個數字,並計算其吞吐量(每秒完成的任務*工人數量)。在某個地方,您會發現速度,工作人員數量和大塊中的任務數量之間存在很好的平衡。

通過爲工人提供一堆測試數據(基本上是基準),並在調整這兩個變量時自動測量吞吐量,您可以更簡單地找到合適的平衡點。記錄每個工作組大小/任務塊大小的吞吐量,並在最後輸出。 吞吐量最高是您的最佳組合。

最後,如果有多長一個特定的任務需要真的取決於任務本身(例如,一些任務需要X時間,而一些採取X*3時間,那麼你可以可以採取幾個方法,根據性質您可以嘗試以下方法之一:

  • 提供您的基準歷史數據 - 一組待處理的實際數據,表示將進入工作網格的實際工作類型,以及使用該示例數據測量吞吐量
  • 生成跨越w譜的隨機大小的任務你認爲你會看到的帽子,並選擇平均工作效率最高的組合,跨越多種尺寸的任務
  • 如果您可以讀取任務中的數據,並且數據會讓您知道是否需要該任務將花費X時間或X*3(或介於兩者之間),您可以在處理任務之前使用該信息來動態調整工作/任務大小,以根據當前工作負載實現最佳吞吐量。 Amazon EC2採用了這種方法,例如,客戶在需要處理更高負載時會騰出更多的虛擬機,並在負載下降時將其旋轉下移。

無論你選擇,任何未知的速度問題應該幾乎總是涉及某種示範標杆,如果在它的運行速度是你的應用程序的成功(有時要處理這麼小的時間關鍵,那這是微不足道的)。

祝你好運!

相關問題