我想獲得社區對此的看法。如果我有一個嚴重限制DB/IO的進程,那麼使用Task Parallel庫並行化各個進程路徑有多聰明?並行化注意事項
我會用一個例子......如果我有一大堆的項目,我需要做下面的操作
- 查詢一個數據庫的項目列表
- 做一些聚合操作根據動態參數列表對某些項目進行分組。
- 對於每個分組結果,根據聚合結果查詢數據庫中的內容。
- 對於每個分組結果,執行一些數值計算(3和4會按順序發生)。
- 做一些插入和更新爲#的計算結果3
- 做每個項目的一些插入和更新返回在#1
按道理講,我可以並行成步驟#任務圖3,#5,#6作爲一個項目對前一個結果沒有影響。但是,每一個都會在數據庫(sql server)上等待,這很好,我知道我們只能在SQL服務器允許的情況下進行處理。
但是我想在邏輯上將任務分配到本地機器上,這樣它就可以像數據庫一樣快速地處理任務,而無需等待任何結果。我已經做了一些模擬原型,我用Thread.Sleeps替換了數據庫調用(我還嘗試了一些與.SpinWait相比更快的版本),並行版本是waaaaay,比當前的完全串行根本不平行。
我害怕的是在SQL服務器上施加了太多的壓力......在我走得太遠的路上,我有沒有考慮一些我應該考慮的事項?