写点什么

.NET 4.0 Beta 1 将为 PLINQ 带来些什么?

  • 2009-05-06
  • 本文字数:1878 字

    阅读完需:约 6 分钟

Ed Essey,微软并行计算团队的程序经理,记述了

一些针对 PLINQ 的最新增强功能,很快要发布的.NET 4.0 Beta 1 将会包含这些功能。他们涉及到:“With"运算符模式(Operators Pattern)、执行模式( Execution Mode)、取消操作(Cancellation)、部分代码的重构、性能提升。

在 Beta 1 中完整的 PLINQ 增强列表是:

  • With- 运算符模式
  • 执行模式
  • 取消操作
  • 自定义分区
  • 部分代码的重构
  • 合并选项
  • AsMerged 又重新命名为 AsSequential
  • 二元运算符现在需要两边都进行 AsParallel
  • 性能提升
  • 删除了很少用到的运算符

“With”运算符模式。有 4 个新的方法:

  • e.AsParallel().WithDegreeOfParallelism
  • e.AsParallel().WithExecutionMode
  • e.AsParallel().WithCancellation
  • e.AsParallel().WithMergeOptions

执行模式。PLINQ 把消耗相似资源过程调整为一个 LINQ-to-Objects 查询,特别地与内存消耗相关的东西。当一个 PLINQ 调用被认为会消耗太多资源,那么调用就连续地执行而不进行并行处理。是否转换到连续执行,是根据查询的具体情况来决定的。如下的查询就会被连续地执行:

  • 包含编入索引的 Select,编入索引的 Where,编入索引的 SelectMany 或者位置不在原始顺序上的 ElementAt 的查询。索引排序容易受到改变排序规则(如 OrderBy)运算符和删除元素(如 Where)运算符的影响。
  • 在已经偏离原始顺序的情况下(参看上面的条目),包含 Take、TakeWhile、Skip、SkipWhile 运算符的查询,。
  • 包含 Zip、SequenceEquals 的查询,除非其中一个数据源具有初始排序的索引,并且其他数据源是可索引的(比如一个数组或 IList)。
  • 包含 Concat 的查询,除非它是应用到可索引的数据源上。
  • 包含 Reverse 的查询,除非应用到可索引的数据源上。

为了强制并行执行,可以这样做:

复制代码
e.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)

取消操作。并行运算可以如下面例子所示那样被取消:

var cts = new CancellationTokenSource();

var q = a.AsParallel().WithCancellation(cts.Token).Where(x=>Filter(x)).Select(x=>DoWork(x);

– separate thread –

foreach (var e in q) { … } // Statement 1

– separate thread –

var l = q.ToList(); // Statement 2

– separate thread –

cts.Cancel(); // this will attempt to cancel any in-flight queries,

// including both statements 1 and 2

自定义分区。Partitioner、OrderablePartitioner类和 Partitioner 工厂类提供了对数据如何分区的控制。

部分代码的重构。IParallelEnumerable、IParallelEnumerable和 IParallelOrderedEnumerable 接口不再是接口而变为不可被扩展的抽象类了:ParalellQuery、ParalellQuery和 OrderedParallelQuery。原因是,一开始他们就不会被扩展。

合并选项。“从 AsMerged 中移出了 ParallelMergeOptions 的处理。合并缓冲区现在通过 WithMergeOptions 方法来设定。”

AsMerged。AsMerged 又重命名为曾经使用的和 AsParallel 类似的名称——AsSequential。

二元运算符。涉及两个数据源的 LINQ 运算符需要两边都进行 AsParallel。类似下面这样的运算:

复制代码
a.AsParallel().AsOrdered().Zip(<b>b</b>, (x, y) => x*y);

可并行化为:

复制代码
a.AsParallel().AsOrdered().Zip(<b>b.AsParallel()</b>, (x, y) => x*y);

复制代码
a.AsParallel().AsOrdered().Zip(<b>b.AsParallel().AsOrdered()</b>, (x, y) => x*y);

影响到的运算符:Zip、Join、JoinGroupJoin、Concat、SequenceEqual、Union、Intersect、Except。

性能提升

1,保序流水线处理(Order-preserving pipelining)进行了合并——之前,在查询上一执行 AsOrdered,就会在生成单个元素之前迫使整个查询执行。现在进行了优化,以便来自查询的元素只在 MergeOptions 值为 Default(AutoBuffered)和 NotBuffered 的时候才生成。

2,针对未实现 IList的数据源,提升了分区正确性。

3,某些基于 IList或数组的查询具有更好的性能。

4,大块分区尺寸进行了调整——基于 IList和数组这样的数据源(也即非可索引的数据源)的查询,大块分区是最常见的分区方案(partitioning scheme)。随着越来越多的大块分区被访问,他们的尺寸也就不断增长。这是对如下两种情况的一个平衡:a)对小数据集进行查询,但在查询中要进行昂贵的委托处理,b)对大数据集进行查询,但在查询中不用进行昂贵的委托处理。

5,消除了有可能存在的错误共享情况,在某些情况下可以提升 6 倍的性能。

删除了很少用到的运算符。某些运算符是为了性能原因而创建的,但是并没有为 LINQ 提供任何性能好处,因而被移除了。哪些运算符要移除并未确定。

查看英文原文: What Is .NET 4.0 Beta 1 Going to Bring to PLINQ?

2009-05-06 20:411991
用户头像

发布了 254 篇内容, 共 67.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

深入了解mock.js,打造出类似真实数据的模拟数据

Apifox

程序员 前端 前端开发 API Mock

赋能生态合作 共话数字创新 | 2023开放原子全球开源峰会软硬协同开源分论坛即将启幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软硬协同开源

“变脸的秘密”!直播源码app开发技术特效功能的实现

山东布谷科技

源码剖析 APP开发 软件开发、 源码搭建 直播源码

浅谈微服务异步解决方案

Java 微服务 异步

大厂面试必备!字节大佬刷Leetcode总结的算法笔记

Java 数据结构 算法 LeetCode

深入探究Flink:实时处理与批量处理的完美结合

xfgg

Java flink 6 月 优质更文活动

让ChatGPT来写今年的高考作文,能得几分?

楚少AI

ChatGPT4 2023高考 ChatGPT写作

深度学习应用篇-计算机视觉-目标检测[4]:综述、边界框bounding box、锚框(Anchor box)、交并比、非极大值抑制NMS、SoftNMS

汀丶人工智能

人工智能 深度学习 计算机视觉 目标检测 6 月 优质更文活动

百度离线资源治理

百度Geek说

数据库 大数据 离线 企业号 6 月 PK 榜 6 月 优质更文活动

【体验有奖】玩转 AIGC,函数计算 x 通义千问预体验,一键部署AI应用赢Airpods

Serverless Devs

函数计算FC AIGC

咸阳有没有等保测评机构?在哪里?怎么联系?

行云管家

等保 等保测评 等保测评机构 咸阳

什么是双机热备技术?华为和思科如何实现双机热备?

Java 网络 双机热备

来了解Amazon CodeWhisperer的强大吧

初学者

云计算 亚马逊 亚马逊云

揭秘阿里云Flink智能诊断利器——Fllink Job Advisor

阿里云大数据AI技术

大数据 flink 企业号 6 月 PK 榜

NFTScan 成为 CMC 官方 NFT 数据合作伙伴

NFT Research

crypto NFT

Amazon CodeWhisperer代码提示体验本文带你了解

我叫于豆豆吖.

云计算 亚马逊 亚马逊云

OpenHarmony 4.0 Beta1发布,邀您体验

OpenHarmony开发者

OpenHarmony

最强AIGC实战应用速成指南来了!14天掌握核心技术

飞桨PaddlePaddle

人工智能 深度学习 百度飞桨

瞄准“量效”难题,百度营销创新推出大健康线索营销解决方案-医效通

说山水

深度学习应用篇-计算机视觉-图像分类[3]:ResNeXt、Res2Net、Swin Transformer、Vision Transformer等模型结构、实现、模型特点详细介绍

汀丶人工智能

人工智能 深度学习 计算机视觉 图像分类 6 月 优质更文活动

问道价值互联网,区块链的下一个十年 | 2023开放原子全球开源峰会区块链分论坛即将启幕

开放原子开源基金会

区块链 开源 开放原子全球开源峰会

打造高可用的微服务架构:Spring Cloud 的优化与实践

xfgg

Java 微服务 SpringCloud 6 月 优质更文活动

等待还是转行?GitHub爆赞的10W字Java八股文,你没得选择

Java java面试 Java八股文 Java面试题 Java面试八股文

2023世界人工智能大会“AI生成与垂直大语言模型”论坛重磅来袭!

NLP资深玩家

用户组是什么意思?怎么容易理解?有什么作用?

行云管家

运维 权限 用户组

Openjob 1.0.2 重磅发布,新一代分布式任务调度框架

stelin

分布式架构 Java 分布式

2022百度ESG报告发布:年度答卷展现安全信任承诺

百度安全

AI老师的作者:17岁的高中生,可能是你想要孩子成为的样子

无人之路

AI 教育 ChatGPT

探究核心技术&最佳实践,云原生OLAP论坛火热开启!

阿里云大数据AI技术

云原生

Jogger慢跑者链游系统开发NFT技术

薇電13242772558

NFT 链游

10分钟了解Kubernetes网络

俞凡

架构 Kubernetes 云原生

.NET 4.0 Beta 1将为PLINQ带来些什么?_.NET_Abel Avram_InfoQ精选文章