我需要並行化一個方法,對列表中的元素進行詳盡的成對比較。串行實現很簡單:嵌套的Parallel.ForEach循環在同一個列表中?
foreach (var element1 in list)
foreach (var element2 in list)
foo(element1, element2);
在這種情況下,foo不會改變元素1或元素2的狀態。我知道這是不是安全,簡單地做嵌套Parallel.ForEach聲明:
Parallel.ForEach(list, delegate(A element1)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
});
會是什麼來實現這個使用並行任務庫的理想方式?
不要以爲PFX將創造儘可能多的線程因爲有平行的任務 - 比這更聰明。 – 2010-07-19 13:58:02
當然不是。默認情況下,它創建與核心一樣多的線程。但問題是,在每次迭代之後,它都會花時間試圖找出哪個線程必須執行下一次迭代。 – 2010-07-19 14:26:19
我不認爲他會說有很多線程,只是爲每個函數調用排隊一個任務會比爲每個外部循環調用PFX引擎的開銷要多得多。 – Gabe 2010-07-19 14:28:22