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

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

ID:42670657

大小:810.54 KB

页数:12页

时间:2019-09-19

详细的.Net并行编程高级教程--Parallel_第1页
详细的.Net并行编程高级教程--Parallel_第2页
详细的.Net并行编程高级教程--Parallel_第3页
详细的.Net并行编程高级教程--Parallel_第4页
详细的.Net并行编程高级教程--Parallel_第5页
资源描述:

《详细的.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.  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。