簡體   English   中英

PLINQ和AsParallel()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM