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

推荐订阅源

I
InfoQ
F
Full Disclosure
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threatpost
AWS News Blog
AWS News Blog
The GitHub Blog
The GitHub Blog
G
GRAHAM CLULEY
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Latest news
Latest news
S
SegmentFault 最新的问题
C
Cisco Blogs
T
Tenable Blog
爱范儿
爱范儿
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Securelist
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
IT之家
IT之家
博客园_首页
C
Cyber Attacks, Cyber Crime and Cyber Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy International News Feed
腾讯CDC
A
About on SuperTechFans
Y
Y Combinator Blog
月光博客
月光博客
C
Check Point Blog
Last Week in AI
Last Week in AI
Know Your Adversary
Know Your Adversary
Hugging Face - Blog
Hugging Face - Blog
U
Unit 42
WordPress大学
WordPress大学
T
The Exploit Database - CXSecurity.com
H
Hacker News: Front Page
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
L
LINUX DO - 热门话题
MongoDB | Blog
MongoDB | Blog
T
Troy Hunt's Blog

博客园 - 深山老林

测试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