概述
现代计算机越来越向着多核、多处理器的方向发展。开发人员现在就可以利用这一优势,开发功能强大的应用,以适应复杂的算法以及大量的数据运算。
并行扩展使开发人员能够轻松编写出充分利用硬件并行能力的程序,程序性能可以随着处理器或核的数量增加而提高,并且无需应对目前愈发复杂的并发编程模型。
Microsoft Parallel Extensions to the .NET Framework 3.5是一个托管编程模型,支持数据并行处理,任务并行处理,并通过一个通用的工作调度器统一协调并行运行的硬件。安装“Microsoft Parallel Extensions to the .NET Framework 3.5”后会注册一个System.Threading.dll程序集到GAC中,调用前需要引用“using System.Threading.Tasks;”。Parallel Extensions主要由两部分组成:Task Parallel Library(TPL)和Parallel LINQ (PLINQ)。并行扩展使得我们可以利用Task Parallel Library(TPL)实现任务的并行化,Parallel LINQ使开发人员可以以声明的方式来处理数据的并行化。
简单调用
定义三个任务:
private void Task1()
{
Thread.Sleep(1000);
}
private void Task2()
{
Thread.Sleep(2000);
}
private void Task3()
{
Thread.Sleep(3000);
}
并行调用这三个任务,代码如下:
Parallel.Invoke(Task1, Task2, Task3);
除此之外,还可以把所有的任务放在一个Action数据组中,再进行调用,如下代码片段,这在某些场景中会非常的有用,我们在设计阶段无需考虑最终运行时将会有多少个任务会执行:
Action[] actions = { Task1, Task2, Task3 };
Parallel.Invoke(actions);
for语句循环调用
Parallel.For(0, 10000, i =>
{
Console.WriteLine(i.ToString());
});
测试结果:
Foreach语句循环调用
Parallel.ForEach(li, i =>
{
Console.WriteLine(i.ToString());
});
测试结果:
总结
- 通过屏幕输出结果可以看出,使用并行计算时,循环的时候是无序的。
- 调用并行库的每个任务必须是独立的,不能出现任务间的相互调用。
Demo下载:
点击这里下载Demo