[英]PLINQ and AsParallel()
這段代碼有什么區別:
int[] tab = new int[] { 1, 2, 3, 4, 5 };
List<int> result1 = (from t in tab
where t > 2
select t).AsParallel().ToList();
和這個:
List<int> result2 = (from t in tab.AsParallel()
where t > 2
select t).ToList();
?
調用AsParallel
后的所有內容都將被並行化。
因此,在您的第一個列表中,只有ToList
操作將被並行化為第二個代碼示例中的位置,整個查詢將被並行化。
我們回去吧 .....
在線程之間划分工作有兩種策略:數據並行和任務並行。
您的位置: structured data parallelism
區域。 (在plinq)
所以我們處理的DATA應該分成線程。
你的第一個代碼毫無意義。
看看AsParallel的語法:
public static ParallelQuery AsParallel(
this IEnumerable source
)
AsParallel
應該應用於IEnumerable
。 (就像在你的兩個例子中......但是 - )
這里的重點是將工作划分為線程。
這將DATA分配給執行SAME操作的線程。
在第二個代碼中,您將DATA分配給將執行相同操作的線程。 (因此你會獲得更好的表現)
但是在第一個代碼中,整個“make core hot operation”是在單線程中完成的。 ( where clause...
) - 所以你錯過了重點
注意 - 如果有以下情況,那將是值得的:
...(from t in tab
where t > 2
select t).AsParallel().where(....)....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.