写点什么

TPL Dataflow——CCR 的后继

  • 2011-01-09
  • 本文字数:1099 字

    阅读完需:约 4 分钟

TPL Dataflow 是微软面向高并发应用而推出的新程序库。借助于异步消息传递与管道,它可以提供比线程池更好的控制,也比手工线程方式具备更好的性能。代价则是你需要遵循.NET 程序员并不太熟悉的一些设计模式。

一个数据流包含了一系列的“块(block)”。在之前的 CCR 中,每个块叫做一个端口(port),它可以是源数据,也可以是目标数据。通常需要将数据发送给一个传播块以让数据进入到数据流当中,所谓传播块就是实现了 ISourceBlock 与 ITargetBlock 的块。由于传播块也是源,因此它可以链接到其他目标或是传播块上。数据流以异步方式从一个块进入到另一个块当中,根据需要它通常在源或目标处进行缓存。

见名知意,TPL Dataflow 底层的基础设施是.NET 4 的 Task Parallel Library。与 TPL 一样,你可以使用客户化实现替换掉默认的调度器。开箱即用的实现就是.NET 的线程池系统以及使用了异步上下文的框架。如果你希望将数据流运行在特定的线程上时通常会使用后者,比如说使用数据流操纵 GUI 时。文档在这点上描述的并不是十分清楚,但似乎你可以每个块为基础设置调度器。如果真的是这样,那它真的是提供了一种优秀的方式将数据编排到 GUI 线程上了。

默认情况下,数据流已经针对性能进行了调解,实现方式也很棒,这意味着一旦激活了某个块,那么它就会继续处理数据直到运行完毕。为了防止某个块消耗掉所有可用资源,我们可以为其设置一个消息数限定值。如果设置了,那么块只会处理设定的数据量,然后就会终止当前任务并由下一个接管。

块可以使用贪婪或非贪婪的方式使用数据。当多个目标都在争夺同一个源的消息时,后者的价值就彰显出来了。比如说,在使用多个目标对同一源进行负载平衡时,你想要保证这些目标是非贪婪的,以免所有数据都进入到第一个贪婪的块当中。使用非贪婪方式的另一个原因是当消息被新版本替换掉时能够丢弃掉这些消息。Broadcast 块就能说明这个问题。它将每条消息提供给每个目标。如果目标不接受该块,那么在 Broadcast 块接收到下一条消息时它还是可用的。

现在来谈谈锁的问题,为了避免死锁,TPL Dataflow 采用了一个很有趣的设计。当某个块需要接收多个源的输入时,它会等待,直到所有源的数据都可用为止。这样,它将使用两阶段提交来保证确实从每个源获取到了数据。我们强烈推荐开发者使用这种机制,不要手工锁定工作流中的数据。

这种设计可能会导致竞态条件,尤其是与 Broadcast 这样的块联合使用时更是如此。本质上,该问题源自于一条消息被多个块发送并操纵了。既然块会干扰到调度器,那么将不变的数据类型作为消息会更加安全。

目前, TPL Dataflow Library 与 Async CTP 都可以下载了。

查看英文原文: TPL Dataflow – The Successor to CCR

2011-01-09 11:501587
用户头像

发布了 88 篇内容, 共 262.1 次阅读, 收获喜欢 8 次。

关注

评论

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

Taro:高性能小程序的最佳实践 | 京东云技术团队

京东科技开发者

小程序 taro 前端 跨端

软件工程师必备的10个Git命令(先码住)

伤感汤姆布利柏

git GitHub

3D场景建模工具

3D建模设计

在线工具 3D场景建模 数字孪生场景

基于神经网络的大模型在自然语言处理中的应用前景展望

百度开发者中心

nlp 大模型 #人工智能

亚马逊云科技宣布推出Amazon Q重塑未来工作方式

财见

香港VPS配置与应用:专家级建议与实践指南

一只扑棱蛾子

香港VPS

通过1688店铺所有商品API接口一键获取店铺所有商品信息

Noah

低代码开发可以解决哪些问题?

代码生成器研究

元宇宙8大关键技术_元宇宙解决方案

3DCAT实时渲染

元宇宙 元宇宙解决方案

即时通讯技术文集(第25期):实时音视频基础入门 [共20篇]

JackJiang

网络编程 即时通讯 IM

好用的建模仿真软件 Comsol Multiphysics激活中文

胖墩儿不胖y

Mac软件 仿真软件 仿真工具

2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。 需保证 返回结果的字典序最小。 要求不能打乱其他字符的相对位置)。 输入:s = “cba

福大大架构师每日一题

福大大架构师每日一题

LLM模型参数助力多模态大模型高效训练

百度开发者中心

大模型 #人工智能 LLM

3d模型的中心原点有偏移怎么办?

3D建模设计

3d建模 模型原点设置

NUKE 14 for mac(电影特效合成软件) v14.0v5中文激活版

mac

苹果mac Windows软件 NUKE 14 电影特效合成软件

创意性LED电子大屏幕推动LED显示屏行业融合

Dylan

功能 显示器 LED显示屏 全彩LED显示屏 led显示屏厂家

uniapp上架app store详细攻略

开源大模型驱动的编程能力测试

百度开发者中心

#人工智能 LLM

线上教育服务的最佳方式为什么是小程序化?

Geek_2305a8

SPI扩展点在业务中的使用及原理分析 | 京东物流技术团队

京东科技开发者

Java spi 企业号11月PK榜

基于Java开发的支持全文检索,知识图谱,工作流审批的知识库管理系统

金陵老街

Vue 工作流 neo4j 知识图谱 spring-boot

亚马逊云科技联合Clarity AI共同推动大规模可持续性投资

财见

为什么说前端代码的复用率低?

代码生成器研究

谷歌推广怎么做?

九凌网络

Mac强大的pd工具箱:Parallels Toolbox激活中文版

mac大玩家j

Mac软件 pd工具箱

单元测试的实践与思考

老张

单元测试 质量保障

互联网计算机 IC 生态发展大揭秘,DFINITY 官方扶持计划全公开!

TinTinLand

#区块链# 编程教程 Dfinity

TPL Dataflow——CCR的后继_.NET_Jonathan Allen_InfoQ精选文章