2013-03-15 46 views
0

有人可能會建議某人應該使用代替代替並行代碼爲英寸。 NET 4.0框架for或Parallel.For .NET 4.0中

我已經做了小PoC上使用for和Parallel.For上的一個特定的長算法和結果,相當有利於Parallel.For甚至在單核環境。

我們可以簡單地忽略在.NET 4.0 Framework中的循環的嗎?

+0

當你想循環順序而不是同時運行?例如,如果循環修改迭代的集合。在多個線程中這樣做會是不明智的。 – David 2013-03-15 11:09:43

+0

呃,沒有。您在每種情況下使用的內容取決於您對該代碼的要求和限制。你不能說任何東西總是在編程。 – Will 2013-03-15 11:10:23

+1

[Usage of Parallel.For](http://stackoverflow.com/q/4635147/109702)或[何時使用Parallel.For?](http://stackoverflow.com/q/3715850/109702)可能有重複),這是結果的[首頁](http://stackoverflow.com/search?q=parallel.for)... – slugster 2013-03-15 11:13:23

回答

4

很多因素考慮這裏

  • 是書面支持併發訪問的循環內的代碼?它是線程安全的嗎?如果不是:這是一個巨大的問題
  • 如果所有的線程最終會以一個單一的資源立即·需要didicated /同步訪問(如UI),那麼就沒有從併發獲得
  • 還有什麼正在發生的事情上這臺機器?如果這是一個Web服務器,它可能是更好一個請求劫持大量核心
  • 但反過來說,如果這是一個客戶端應用程序,那麼可以肯定,使用大量內核理想的釋放UI線程ASAP
  • 是工作CPU綁定? IO綁定?什麼?並行訪問單個磁盤主軸會使事情變得更糟,而不是更好
  • 線程有開銷;併發增加完成的總工作 - 意圖減少已過時時間
  • 是在本地完成的,還是在不同的服務器上完成的?如果是這樣,那個其他服務器的線程模型是什麼?

在大多數情況下,for/foreach是好的。

+0

謝謝馬克的幫助 – 2013-03-15 13:04:27