惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
Jina AI
Jina AI
N
Netflix TechBlog - Medium
量子位
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
InfoQ
J
Java Code Geeks
T
Tailwind CSS Blog
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
腾讯CDC

博客园 - 深山老林

测试Varnish缓存服务器与IIS连接数 谈谈持续集成 亲测SQLServer的最大连接数 读书笔记:Oracle锁定策略的总结 jQuery formValidator不支持新版手机的解决办法 TFS Workspace错误解决办法 Mindjet.MindManager.v9.0“参数错误”解决办法 c#3.0提供的扩展方法 Entityframework提供的处理并发冲突方式 ASP.NET MVC2中返回Json异常的解决办法 Visual studio 配置文件下载 WF之基本概念 数据库访问的性能问题与瓶颈问题 SQLServer中批量插入数据方式的性能对比 再次探扩展-对xVal进行扩展解决验证不同步的问题 更改Outlook数据文件的路径 谈谈c#中的static 再次探讨企业级开发中的Try......Catch性能问题 在企业级开发中使用Try...Catch...会影响效率吗?
微软并行编程类库Parallel Extensions介绍
深山老林 · 2010-01-01 · via 博客园 - 深山老林

概述

现代计算机越来越向着多核、多处理器的方向发展。开发人员现在就可以利用这一优势,开发功能强大的应用,以适应复杂的算法以及大量的数据运算。

并行扩展使开发人员能够轻松编写出充分利用硬件并行能力的程序,程序性能可以随着处理器或核的数量增加而提高,并且无需应对目前愈发复杂的并发编程模型。

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());
});
测试结果:
2010-1-1-1 

Foreach语句循环调用


Parallel.ForEach(li, i =>
{
Console.WriteLine(i.ToString());
});
测试结果:
2010-1-1-2 
 

总结

  • 通过屏幕输出结果可以看出,使用并行计算时,循环的时候是无序的。
  • 调用并行库的每个任务必须是独立的,不能出现任务间的相互调用。
Demo下载:
 
点击这里下载Demo