详细的Net并行编程高级教程--Parallel.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详细的Net并行编程高级教程--Parallel

详细的.Net并行编程高级教程--Parallel 一直觉得自己对并发了解不够深入,特别是看了《 HYPERLINK /stoneniqiu/p/4815259.html \t _blank 代码整洁之道》觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准。而且在《 HYPERLINK /subject/5375620/ \t _blank 失控》这本书中也多次提到并发,不管是计算机还是生物都并发处理着各种事物。人真是奇怪,当你关注一个事情的时候,你会发现周围的事物中就常出现那个事情。所以好奇心驱使下学习并发。便有了此文。 一、理解硬件线程和软件线程 ? ?多核处理器带有一个以上的物理内核--物理内核是真正的独立处理单元,多个物理内核使得多条指令能够同时并行运行。硬件线程也称为逻辑内核,一个物理内 核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代表一个物理内核;Windows中每个运行的程序都是一个进程,每一个进程都会创建并运行 一个或多个线程,这些线程称为软件线程。硬件线程就像是一条泳道,而软件线程就是在其中游泳的人。 二、并行场合 ? .Net Framework4 引入了新的Task Parallel Library(任务并行库,TPL),它支持数据并行、任务并行和流水线。让开发人员应付不同的并行场合。 数据并行:有大量数据需要处理,并且必须对每一份数据执行同样的操作。比如通过256bit的密钥对100个Unicode字符串进行AES算法加密。 任务并行:通过任务并发运行不同的操作。例如生成文件散列码,加密字符串,创建缩略图。 流水线:这是任务并行和数据并行的结合体。 ? TPL引入了System.Threading.Tasks ,主类是Task,这个类表示一个异步的并发的操作,然而我们不一定要使用Task类的实例,可以使用Parallel静态类。它提供了 Parallel.Invoke, Parallel.For Parallel.Forecah 三个方法。 三、Parallel.Invoke ? ?试图让很多方法并行运行的最简单的方法就是使用Parallel类的Invoke方法。例如有四个方法: WatchMovie HaveDinner ReadBook WriteBlog ? 通过下面的代码就可以使用并行。 System.Threading.Tasks.Parallel.Invoke(WatchMovie, HaveDinner, ReadBook, WriteBlog); 这段代码会创建指向每一个方法的委托。Invoke方法接受一个Action的参数组。 1public static void Invoke(params Action[] actions);用lambda表达式或匿名委托可以达到同样的效果。 System.Threading.Tasks.Parallel.Invoke(() = WatchMovie(), () = HaveDinner(), () = ReadBook(), delegate() { WriteBlog(); }); ?1.没有特定的执行顺序。 ?Parallel.Invoke方法只有在4个方法全部完成之后才会返回。它至少需要4个硬件线程才足以让这4个方法并发运行。但并不保证这4个方法能够同时启动运行,如果一个或者多个内核处于繁忙状态,那么底层的调度逻辑可能会延迟某些方法的初始化执行。 给方法加上延时,就可以看到必须等待最长的方法执行完成才回到主方法。 static?void?Main(string[]?args)? ????????{? ????????????System.Threading.Tasks.Parallel.Invoke(WatchMovie,?HaveDinner,?ReadBook,? ????????????????WriteBlog);? ????????????Console.WriteLine(执行完成);? ????????????Console.ReadKey();? ????????}? ? ????????static?void?WatchMovie()? ????????{? ????????????Thread.Sleep(5000);? ????????????Console.WriteLine(看电影);? ????????}? ????????static?void?HaveDinner()? ????????{? ????????????Thread.Sleep(1000);? ????????????Console.WriteLine(吃晚饭);? ????????}? ???

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档