- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                
                              第28 章 
                              执行并行数据访问 
本章旨在教会你: 
  用PLINQ 对耗时的LINQ 查询进行“并行化” 
  使用并发集合类,以线程安全的方式维护数据集合 
  使用并行同步基元,协调对并行任务所操作的数据的访问 
  27                 .NET Framework 4.0 
第  章讲述了如何利用                           的新功能来并行执行操作。在更早的章节中, 
                            (Language Intergrated Query LINQ) 
还讲述了如何使用语言集成查询                                     ,      以声明式的方式访问数 
据。一个典型的 LINQ  查询会生成一个可枚举的结果集,可以顺序遍历这个集合来获取数 
据。如果用于生成结果集的数据源很大,运行 LINQ  查询就可能花费很长的时间。许多数 
据库管理系统为了对查询进行优化,都采用了特殊的算法,能将查询时所涉及的标识数据 
的过程分解成一系列任务,然后以并行方式运行这些任务。任务完成后,再将结果合并到 
一起,构成一个完整的结果集。任务并行库(TPL)的设计者决定以类似的方式提供LINQ , 
                   LINQ  (Parallel LINQ  PLINQ)                         PLINQ 
结果就是俗称的“并行              ”            ,       。本章的前半部分会指导你学习 
的基础知识。 
然而,PLINQ 并非总是开发一个应用程序的最佳技术。如果手动创建自己的任务,需要确 
保并发的线程在运行任务时,能正确协调它们的行动。TPL  提供了一些允许等待任务完成 
的方法。可利用这些方法在一个非常粗糙的等级上协调任务。但是,假如两个任务试图同 
时访问和修改相同的数据,那么会发生什么?如果两个任务同时运行,它们的相互重叠的 
操作就会破坏数据。这会造成程序产生 bug ,而且由于它们的不确定性,所以很难纠正。 
       1.0   Microsoft .NET Framework 
自版本  起,                             就提供了一些基元构造来锁定数据和协调线程。 
但要想有效地使用它们,开发人员必须对线程的交互方式有一个很好的理解。TPL  引入了 
这些基元构造的一些变体,而且包含了特殊的集合类,可在不同的任务之间对数据访问进 
行同步。这些类将协调数据访问时所涉及的大量复杂性都隐藏起来了。在本章后半部分, 
将具体解释如何使用一些新的同步基元和集合类。 
28.1     用PLINQ 并行进行声明式数据访问 
本书前面已演示过LINQ 从可枚举数据结构中检索数据时的强大能力。在.NET   Framework 
4.0    LINQ     TPL 
   中,       使用       中的一些技术进行了扩展,提高了一些查询操作的性能,并实现了 
并行化。这些扩展统称为PLINQ 。 
     PLINQ 的原理是将一个数据集划分成不同的“分区”(partition),并利用任务,以并行方式 
     获取符合查询条件的数据。所有任务都完成后,为每个分区获取的结果合并成一个可枚举 
     的结果集。如果数据集含有大量元素,或者查询条件涉及复杂的、昂贵的操作,那么PLINQ 
     就再合适不过了。 
     PLINQ  的一个主要目标就是尽可能地保持向后兼容。如果你有大量现有的LINQ 查询,肯 
                                      .NET Framework             .NET Framework 
     定不愿意在修改了之后才能在最新版本的                             中运行。为此, 
     提供了扩展方法 AsParallel ,可将它用于一个可枚举的对象。AsParallel                 方法返回一个 
     ParallelQuery  对象,它的行为和普通的可枚举对象相似,只是它为许多 LINQ  操作符都提 
     供了并行的实现,这些操作符包括join  和where 等等。LINQ 操作符的新实现是基于TPL 
     的,会通过多种算法尝试以并行方式运行LINQ 查询的不同部分。 
     
                 原创力文档
原创力文档 
                        

文档评论(0)