最简单的多线程,LINQ并行库(PLINQ)

现在使用多线程,异步同步变得越来越简单

Thread

Task

多线程,是为了更充分的利用计机机多核的运算能力

并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现。PLINQ 实现完整的 LINQ 标准查询运算符集作为 T:System.Linq 命名空间的扩展方法,并具有用于并行运算的其他运算符。PLINQ 将 LINQ 语法的简洁和可靠性与并行编程的强大功能结合在一起。就像面向任务并行库的代码一样,PLINQ 查询会根据主计算机的能力按比例调整并发程度。

在许多情况下,PLINQ 可通过更有效地使用主计算机上的所有可用内核来显著提高 LINQ to Objects 查询的速度。这一性能提升将使桌面具备高性能计算能力。

我们来做一个简单的测试:

static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
int[] vals = Enumerable.Range(0, Int16.MaxValue).ToArray();
Console.WriteLine(“顺序执行开始…”);
sw.Start();
for (int i = 0; i < 10; i++)
{
int[] x1 = vals.Where(IsValid).ToArray();
}
sw.Stop();
Console.WriteLine(“顺序执行所花时间 {0} 毫秒”, sw.ElapsedMilliseconds);

Console.WriteLine(“并行执行开始…”);
sw.Restart();
for (int i = 0; i < 10; i++)
{
int[] x2 = vals.AsParallel().Where(IsValid).ToArray();
}
sw.Stop();
Console.WriteLine(“并行所花时间 {0} 毫秒”, sw.ElapsedMilliseconds);
Console.Read();
}

20160324165606

https://msdn.microsoft.com/en-us/library/dd460688(v=vs.110).aspx