欢迎来到天天文库
浏览记录
ID:42670657
大小:810.54 KB
页数:12页
时间:2019-09-19
《详细的.Net并行编程高级教程--Parallel》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、详细的.Net并行编程高级教程--Parallel一直觉得自己对并发了解不够深入,特别是看了《代码整洁之道》觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准。而且在《失控》这本书中也多次提到并发,不管是计算机还是生物都并发处理着各种事物。人真是奇怪,当你关注一个事情的时候,你会发现周围的事物中就常出现那个事情。所以好奇心驱使下学习并发。便有了此文。一、理解硬件线程和软件线程 多核处理器带有一个以上的物理内核--物理内核是真正的独立处理单元,多个物理内核使得多条指令能够同时并行运行。硬件线程也称为逻辑内
2、核,一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代表一个物理内核;Windows中每个运行的程序都是一个进程,每一个进程都会创建并运行一个或多个线程,这些线程称为软件线程。硬件线程就像是一条泳道,而软件线程就是在其中游泳的人。二、并行场合 .NetFramework4引入了新的TaskParallelLibrary(任务并行库,TPL),它支持数据并行、任务并行和流水线。让开发人员应付不同的并行场合。·数据并行:有大量数据需要处理,并且必须对每一份数据执行同样的操作。比如通过256bit的密钥对1
3、00个Unicode字符串进行AES算法加密。·任务并行:通过任务并发运行不同的操作。例如生成文件散列码,加密字符串,创建缩略图。·流水线:这是任务并行和数据并行的结合体。 TPL引入了System.Threading.Tasks,主类是Task,这个类表示一个异步的并发的操作,然而我们不一定要使用Task类的实例,可以使用Parallel静态类。它提供了Parallel.Invoke,Parallel.ForParallel.Forecah三个方法。三、Parallel.Invoke 试图让很多方法并行运行的最简单的
4、方法就是使用Parallel类的Invoke方法。例如有四个方法:·WatchMovie·HaveDinner·ReadBook·WriteBlog 通过下面的代码就可以使用并行。System.Threading.Tasks.Parallel.Invoke(WatchMovie,HaveDinner,ReadBook,WriteBlog);这段代码会创建指向每一个方法的委托。Invoke方法接受一个Action的参数组。1publicstaticvoidInvoke(paramsAction[]actions);用lam
5、bda表达式或匿名委托可以达到同样的效果。System.Threading.Tasks.Parallel.Invoke(()=>WatchMovie(),()=>HaveDinner(),()=>ReadBook(),delegate(){WriteBlog();}); 1.没有特定的执行顺序。 Parallel.Invoke方法只有在4个方法全部完成之后才会返回。它至少需要4个硬件线程才足以让这4个方法并发运行。但并不保证这4个方法能够同时启动运行,如果一个或者多个内核处于繁忙状态,那么底层的调度逻辑可能会延迟某些方法
6、的初始化执行。给方法加上延时,就可以看到必须等待最长的方法执行完成才回到主方法。1.static void Main(string[] args) 2. { 3. System.Threading.Tasks.Parallel.Invoke(WatchMovie, HaveDinner, ReadBook, 4. WriteBlog); 5. Console.WriteLine("执行完成"); 6. Conso
7、le.ReadKey(); 7. } 8. 9. static void WatchMovie() 10. { 11. Thread.Sleep(5000); 12. Console.WriteLine("看电影"); 13. } 1. static void HaveDinner() 2. { 3. Thread.Sleep(1000); 4. Co
8、nsole.WriteLine("吃晚饭"); 5. } 6. static void ReadBook() 7. { 8. Thread.Sleep(2000); 9. Console.WriteLine("读书"); 10.
此文档下载收益归作者所有