我知道新的TPL(任務並行庫)已經實現了Parallel.ForEach(),因此它可以與「表達的並行性」一起工作。這意味着,它並不能保證你的委託將運行在多個線程中,而是檢查主機平臺是否有多個內核,如果是的話,它只能在整個內核中分配工作(每個內核基本上只有1個線程) 。.NET 4 ... Parallel.ForEach()問題
如果主機系統沒有多個核心(越來越難找到這樣的計算機),那麼它會像「常規」foreach循環那樣按順序運行你的代碼。坦率地說,非常酷的東西。
通常我會做類似下面放置從線程池在後臺線程我長時間運行的操作:
ThreadPool.QueueUserWorkItem(新WaitCallback(targetMethod),新Object2PassIn());
在主計算機只有一個核心的情況下,TPL的Parallel.ForEach()會自動將調用放在後臺線程上嗎?或者,我是否應該從後臺管理員那裏調用任何TPL調用,以便如果我從一臺核心計算機執行,至少該邏輯將不在GUI的調度線程中?
我擔心的是,如果我讓TPL負責這一切,我想確保它是否確定它是一個單核心框,它仍然將在Parallel.ForEach()循環內部的代碼編組到後臺線程中就像我會做的一樣,以免阻塞我的GUI。
感謝您的任何想法或意見...
只需快速跟進:TPL Rocks!無法通過使用TPL呼叫與「標準」票價進行一些小的調整,就能夠讓我能夠製作各種應用程序的速度快得多。我正在關注削減80%以上的各種物品的加工時間。 MS真的把它從這個公園裏淘汰出去了 - 很棒的工作人員。 – BonanzaDriver 2011-01-06 01:52:56