知识大全 .NET Framework 4并行编程的现在

Posted

篇首语:宁打金钟一下,不打破鼓千声。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET Framework 4并行编程的现在相关的知识,希望对你有一定的参考价值。

.NET Framework 4并行编程的现在  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  让我们进入 NET Framework 此版本 NET Framework 扩充了大量功能 显著降低了开发人员在应用程序中表示并行性的难度 并提高了并行执行的效率 这远远超出了并行循环的范畴 尽管如此 我们仍将从这里开始     System Threading 命名空间在 NET Framework 中通过一个新的子命名空间得到了增强 System Threading Tasks 此命名空间包含一个新类型 Parallel 该类型公开了丰富的静态方法 用以实现并行循环和结构化 派生 联结 模式 作为其用法的示例 请考虑前面的 for 循环

  

>

  

  借助 Parallel 类 可以如下所示轻松实现并行化

  

  

>

  

  在这里 开发人员仍负责确保循环的每个迭代实际上都是独立的 但除此之外 Parallel For 构造会处理此循环的并行化的所有方面 该构造跨计算中涉及的所有基础线程动态地对输入范围进行分区 同时仍尽可能减小分区的开销 使其接近于静态分区实现的开销 该构造动态地增加和减少计算中涉及的线程数 以便发现最适合给定工作负载的最佳线程数(与惯常认知不同的是 最佳线程数并不总是等于硬件线程数) 该构造还提供前面演示的简单实现中不存在的异常处理功能 等等 最重要的是 该构造使开发人员不必在线程的较低级别操作系统抽象层考虑并行性 并且无需为工作负载分区 卸载到多个核心以及高效地联接结果而一次又一次地编写谨小慎微的解决方案 如此 开发人员便可集中时间处理更重要的工作 使开发人员的工作更富收益的业务逻辑     Parallel For 还为需要更加精细地控制循环操作的开发人员提供了便利工具 通过为 For 方法提供的一个选项包 开发人员可以控制循环运行所在的基础计划程序 要使用的最大并行度 以及循环外部实体用于请求在循环方便时尽早正常终止的取消标记

  

  

>

  

  此自定义功能突出了 NET Framework 中此并行化工作的一个目标 在不使编程复杂化的情况下显著降低开发人员利用并行性的难度 同时为更加高级的开发人员提供了对处理和执行进行微调所需的工具 出于此目的 还支持其他调整 Parallel For 的其他重载使开发人员可以尽早中断循环

  

  

>

  

  还有其他重载使开发人员能够使状态流过最终在同一基础线程上运行的迭代 从而显著提高算法实现(如缩减)的效率 例如

  

  

>

  

  Parallel 类不仅为整数范围提供支持 还为任意 IEnumerable 源(可枚举序列的 NET Framework 表示形式)提供支持 代码可以对枚举器连续地调用 MoveNext 以便检索下一个 Current 值 通过这种使用任意可枚举内容的能力可实现任意数据集的并行处理 而无论数据在内存中的表示形式如何 数据源甚至可以根据需要具体化 并在 MoveNext 调用到达源数据的尚未具体化部分时分页

  

  

>

  

  与 Parallel For 一样 Parallel ForEach 也采用许多自定义功能 但提供比 Parallel For 更大的控制能力 例如 ForEach 使开发人员可以自定义对输入数据集进行分区的方式 这通过一组侧重于分区的抽象类完成 这些抽象类使并行化构造可以请求固定或可变数量的分区 从而允许分区程序将这些分区抽象分派给输入数据集 并根据需要以静态或动态方式将数据分配给这些分区

  

  

>

  

  Parallel For 和 Parallel ForEach 在 Parallel 类上补充提供了一个 Invoke 方法 该方法接受任意数量的待调用操作 并可实现基础系统可以支持的最大并行度 通过此经典的 派生 联结 构造可以轻松地并行化递归的 分割 解决 算法 如常用的 QuickSort 示例

  

  

>

  

  

  尽管有了很大进步 但是 Parallel 类只是可用功能的一小部分 NET Framework 中实现的更重大的并行化进步之一是引入了并行 LINQ 人们将其亲切地称为 PLINQ(发音为 Pee link ) LINQ(即语言集成查询)是在 NET Framework 版本 中引入的 LINQ 实际包含两方面内容 对一组公开为数据集操作方法的运算符的描述 以及 C# 和 Visual Basic 中用于直接在语言中表示这些查询的上下文关键字 LINQ 中包含的许多运算符都基于数据库社区多年以来所了解的等效运算 包括 Select SelectMany Where Join GroupBy 以及大约 个其他运算 NET Framework 标准查询运算符 API 为这些方法定义了模式 但是未定义这些运算应针对的确切数据集 也未确切定义应如何实现这些运算 各种 LINQ 提供程序 随后为许多不同数据源和目标环境(内存中集合 SQL 数据库 对象/关系映射系统 HPC Server 计算群集 临时和流数据源等等)实现此模式 最常用的提供程序之一名为 LINQ to Objects 它提供以 IEnumerable 为基础实现的全套 LINQ 运算符 这样便可在 C# 和 Visual Basic 中实现查询 如下面的代码段所示 该代码段从文件逐行读取所有数据 从而仅筛选出包含 secret 一词的行并对这些行进行加密 最终结果是字节数组构成的可枚举内容

  

  

>

  

  对于需要大量计算的查询 甚至只对于涉及大量长延迟 I/O 的查询 PLINQ 提供自动并行化功能 从而实现利用端到端并行算法的完整 LINQ 运算符集 因此 开发人员只需为数据源附加 AsParallel() 即可并行化前面的查询

  

  

>

  

  与 Parallel 类一样 此模型也选择强迫开发人员评估并行运行计算的后果 但是 一旦做出并行选择 系统便会处理实际并行化 分区 线程限制等较低级别的细节 此外 与 Parallel 一样 这些 PLINQ 查询也可通过各种方式进行自定义 开发人员可以控制如何实现分区 实际使用的并行度 同步与延迟之间的权衡等

  

  

>

  

  这些用于循环和查询的编程模型功能强大 级别更高 它们构建于同样强大但是级别较低的一组基于任务的 API 之上 以 System Threading Tasks 命名空间中的 Task 和 Task 类型为中心 实际上 并行循环和查询引擎属于任务生成器 依靠基础任务基础结构将表示的并行性映射到基础系统中提供的资源 在其核心 Task 是工作单元(或者 更宽泛地说 是异步单元 即可能生成并在以后通过各种方式进行联接的工作项)的表示形式 Task 提供 Wait WaitAll 和 WaitAny 方法 这些方法允许同步阻止向前推进 直至目标任务完成 或直至向这些方法的重载提供的其他约束得到满足(例如 超时或取消标记) Task 通过其 IsCompleted 属性支持轮询任务是否完成 更宽泛地说 通过其 Status 属性支持轮询其生命周期处理中的更改 可能最重要的是 它提供 ContinueWith ContinueWhenAll 和 ContinueWhenAny 方法 通过这些方法可以创建仅当完成一组特定先行任务时才安排的任务 通过此续接支持可以轻松实现许多方案 从而可以在计算之间表示依赖关系 以便系统可以基于这些依赖关系的满足情况安排工作

  

  

>

  

  通过从 Task 派生的 Task 类可以从完成的操作传出结果 从而向 NET Framework 提供核心 未来 实现

  

  

>

  

cha138/Article/program/ASP/201311/21768

相关参考

知识大全 .NET 4并行编程之共享数据问题和解决概述

.NET4并行编程之共享数据问题和解决概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在开始

知识大全 并行编程

.NET4特性聚焦:并行编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用语言运行时(Com

知识大全 对.NET Framework 反射的反思[4]

对.NETFramework反射的反思[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果

知识大全 .NET Framework 4新增LocalDB支持

微软:.NETFramework4新增LocalDB支持  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 .NET Framework 4.5新特性介绍

.NETFramework4.5新特性介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    开

知识大全 ADO.NET Entity Framework 试水——并发[4]

ADO.NETEntityFramework试水——并发[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 使用.NET Framework中新的日期时间类型[4]

使用.NETFramework中新的日期时间类型[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 详解ADO.NET Entity Framework 4中枚举的使用

详解ADO.NETEntityFramework4中枚举的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 VB.Net编程入门之Hello World(4)

VB.Net编程入门之HelloWorld(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 使用.net Remtoing并行计算

使用.netRemtoing并行计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在MSDN上