【大咖分享】AI 大模型时代,架构师有哪些机遇和挑战? 了解详情
写点什么

进一步了解并行 LINQ

  • 2007-09-30
  • 本文字数:894 字

    阅读完需:约 3 分钟

LINQ(Language Integrated Query)是 Visual Studio 2008 中的领军人物。借助于 LINQ 技术,我们可以使用一种类似 SQL 的语法来查询任何形式的数据。目前为止 LINQ 所支持的数据源有 SQL Server、XML 以及内存中的数据集合。开发人员也可以使用其提供的扩展框架添加更多的数据源,例如 MySQL、Amazon 甚至是 Google Desktop。

一般来讲,这类查询语句的一个重要特点就是可以并行化执行。虽然有些情况下并行可能会带来一些问题,但这种情况非常少见。这样也就水到渠成地引出了 PLINQ 这个并行处理的 LINQ 类库。PLINQ 原名为 Parallel LINQ,支持 XML 和内存中的数据集合。执行于远程服务器上的查询语句(例如 LINQ to SQL)显然无法实现这个功能。

将 LINQ 语句转换为 PLINQ 语句极为简单——只需要在查询语句中 From 子句所指定的数据源的最后添加.AsParallel() 即可。随后 Where、OrderBy 和 Select 子句将自动改为调用这个并行的 LINQ 版本。 据 MSDN Magazine 介绍,PLINQ 可以以三种方式执行。第一种是管道处理:一个线程用来读取数据源,而其他的线程则用来处理查询语句,二者同步进行——虽然这个单一的消费线程可能并不那么容易与多个生产线程同步。不过若是能够仔细配置好负载平衡的话,仍然会极大地减少内存占用。

第二种模式叫做“stop and go”,用于处理结果集需要被一次返回时(例如调用 ToList、ToArray 或对结果排序)的情况。在这种模式下,将依次完成各个处理过程,并将结果统一返回给消费线程。这个模式在性能上将优于第一种模式,因为它省去了用来保持线程同步所花费的开销。

最后一种方法叫做“inverted enumeration”。该方法并不需要实现收集到所有的输出,然后在单一的线程中处理,而是将最终调用的函数通过 ForAll 扩展传递到每个线程中。 这是目前为止最快的一种处理模式,不过这需要传递到 ForAll 中的函数是线程安全的,且最好不包含任何 lock 之类的互斥语句。

若是 PLINQ 中任意的一个线程抛出异常,那么所有的其他线程将会被终止。若是抛出了多个异常,那么这些异常将被组合成一个 MultipleFailuresException 类型的异常,但每个异常的调用堆栈仍会被保留。 查看英文原文: More on Parallel LINQ

2007-09-30 23:591212
用户头像

发布了 37 篇内容, 共 77819 次阅读, 收获喜欢 3 次。

关注

评论

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

【Knative系列】看完这篇还不懂 Knative Serving,你来打我~(史上最详细)

公众号:云原生Serverless

Serverless 云原生 Knative

LiteOS内核源码分析:消息队列Queue

华为云开发者联盟

队列 LiteOS LiteOS内核 消息队列Queue 队列池

使用 SpringBoot 的 CommandLineRunner 遇到的坑

Java小咖秀

容器 开发 springboot CommandLineRunner ApplicationRunner

四两拨千斤——你不知道的VScode编码TypeScript的技巧

葡萄城技术团队

加密原理详解:对称式加密VS非对称式加密

vivo互联网技术

加密 rsa

重读《重构2》- 以查询取代临时变量

顿晓

重构 4月日更

华为云薛浩:走进视频“新时代”

华为云开发者联盟

云原生 视频 华为云 vr 图形处理

快来,告诉你一个赚钱的秘诀:金钱的秘密

leoay

赚钱 秘密 金钱的秘密

Zookeeper基础原理&应用场景详解

leonsh

zookeeper 中间件 ZooKeeper原理

别再问我 2050 可以干什么,Make a Movie in a Day!

阿里云视频云

电影

区块链电子合同签约,推动合同签约数字化转型

13530558032

python内置数据结构list、set、dict、tuple(二)

若尘

List 数据结构 set 元组 Python编程

阿里巴巴研究员吴翰清采访提纲:天才少年之路

Nydia

签约计划

美国工程院士、谷歌首席架构师 杰夫·迪恩(JeffDean) John 易筋 ARTS 打卡 Week 45

John(易筋)

ARTS 打卡计划

Semaphore自白:限流器用我就对了!

王磊

Java 多线程 Semaphore

专访彩食鲜 CTO 乔新亮:CTO的“升级”秘笈

IT蜗壳-Tango

《采访提纲:声网 Agora.io 资深 iOS 开发工程师--龚宇华》

空城机

签约计划 4月日更 热门活动

哭了!“日志注入”为什么跟想象中的不一样

华为云开发者联盟

Java 参数 日志注入 log4j2框架 异常堆栈

智慧平安社区建设--赋能基层治理

13530558032

ES 终于可以搜到“悟空哥”了!

悟空聊架构

中文分词 elasticsearch 分词 ES ik

读《乌克兰拖拉机简史》有感

箭上有毒

读书笔记 4月日更

库存溯源之批次管理

陈俊

溯源 供应链 仓储 冷链 wms

AUC/ROC:面试中80%都会问的知识点

华为云开发者联盟

机器学习 面试 mindspore roc AUC

fil云算力挖矿系统开发成功案例丨fil云算力挖矿源码设计

系统开发咨询1357O98O718

【LeetCode】解码方法Java题解

Albert

算法 LeetCode 4月日更

存储成本降低80%!US3在海量数据归档存储下的成本优化技术实践

UCloud技术

存储 海量数据 存储成本

张超 - 机锋网联合创始人 - 采访提纲:那些 3 个月就上线的产品,如何去做技术规划?

梦想橡皮擦

签约计划

聪明人的训练(二十一)

Changing Lin

4月日更

源中瑞区块链农产品溯源--推动农业科技发展

13530558032

MySQL内置函数

Sakura

4月日更

IPFS挖矿系统开发详情案例丨IPFS挖矿矿机源码平台

系统开发咨询1357O98O718

  • 扫码加入 InfoQ 开发者交流群
进一步了解并行LINQ_.NET_Jonathan Allen_InfoQ精选文章