NET40并行计算技术基础(6).doc

NET40并行计算技术基础(6).doc

ID:51725790

大小:96.00 KB

页数:7页

时间:2020-03-15

NET40并行计算技术基础(6).doc_第1页
NET40并行计算技术基础(6).doc_第2页
NET40并行计算技术基础(6).doc_第3页
NET40并行计算技术基础(6).doc_第4页
NET40并行计算技术基础(6).doc_第5页
资源描述:

《NET40并行计算技术基础(6).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、.NET4.0并行计算技术基础(6)金旭亮19.3.3使用Parallel类让一切并行起来在TPL中,最容易使用的类是Parallel,此类提供了三个方法“群”用于实现三种常用的并行程序执行结构。1使用Parallel.Invoke并行执行任务半我们有一系列相互独立的工作需要并行执行时,最简单的方法是使用TPL的Parallel类的lnvoke()方法来并行执行它们。例如,假设以下三个方法调用语句0间是相互独立的1⑴,贝I」它们可以并行执行:1[1]所谓“相互独立”的方法,指这些方法共亭任何资源,对执行顺序也没有任何要求。2使用Parallel.For并行访问数据(partition)

2、)另一种非常常见的并行场景是并行循环,例如:for(inti=0;i<100;i++)■DoWork(i);//完成某些T作■上述循环中,要等待前一个循环结朿Z后,下一个循环才开始执行。如果将其改为以下形式:则这些循环就可以并行执行了。注意:并行执行的循环其执行顺序是“乱”的,每次运行都可能会有不同的执行顺序。示例项目ParallelFor展示了这一特性。Parallel.For还有儿个重载的形式,涉及到屮途取消操作和异常捕获的问题,我们将在麻面的章节屮介绍。一个有意思的问题是,如果在一段顺序执行的稈序代码屮有一句调用了Parallel.For启动一个并行循环,如下所示:语句1;Par

3、allel・For(...);语句2;//……其他语句那么,语句2(及示继语句)是在Parallel.For执行完示才执行呢还是与Parallel.For并行执行?在MSDN屮并没有明确地冋答这个问题。而我经过实验,发现要等到Parallel.For执行完后才会执行语句2(及后继语句)。技术探险之旅:Parallel.For的内部实现对于好奇的读者,不妨使用ReflectorX具去深入探究一下Parallel.For的实现代码,虽然这些代码比较复杂,但不难发现以下代码框架://...(代码略)ParallelForReplicatingTaskrootTask=null;rootTas

4、k=newParallelForReplicatingTask(...);rootTask•RunSynchronously(paralleloptions•EffectiveTaskScheduler);//...(代码略)rootTask.Wait();//...(代码略)rootTask.Dispose();//...(代码略)其中ParallelForReplicatingTask类是TPL内部定SC的一个类,其基类是Tasko从上述代码框架中,不难明白Parallel.For的工作原理:TPL在Parallel.For方法内部创建了一个任务对象rootTask,然后调用此对象

5、的RunSvnchronouslyO方法以"同步"方式执行并行循环,注意,别被这里的单词“Syiichr(m()usly(中文译为“同步地”)给欺骗了,此方法绝不是串行执行的。因为此方法接收一个参数,此参数引用一个任务调度器对象,由此调度器对象将任务进行分解,交由线程池中的线程执行,这是实现并行循环的关键!任务交给线程池中的线程执行之后,九TbLFor方法调用rootTask.乂如⑴方法等待所有线程完成工作。最后,销毁rootTask对象。通过仔细分析源码,我们明白了为何在串行代码中使用Parallel.For会出现“串行T并行T串行”这种执行顺序。另外,我们还可以得到另一个结论:使用

6、Parallel启动的并行计算,在底层使用Task来完成。有关Task和任务调度器的内容,在后面的章节中还有介绍。3在并行循环中使用线程局部存储区我们在第17章中介绍过线程局部存储区(TLS:ThreadLocalStorage),TLS屮保存的数据只允许与它相关联的线稈独占访间。在并行循环屮,将会启动多个线程执行循坏,如果需要的话,我们可以将一些数据放到TLS屮,并且在多个循环屮共享。.NET提供了一个泛型的Parallel.For()A法在并行循环中使用TLS,以下是此方法声明:publicstaticParallelLoopResultFor(in

7、tfromlnclusive,inttoExclusive,FunclocallnitzFuncbody,ActionlocalFinally这个方法有相当多的参数,需要仔细地辨析使用。1.泛型参数TLocal表明要保存在TLS屮的数据的类型。1.fromlnclusive和toExclusive表示循环控制变量的起始值和结束值,由它们控制

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

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

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