写点什么

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:502123
用户头像

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

关注

评论

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

淘宝API接口申请指南

联讯数据

法律情境扮演、逆向推理文字游戏、AIGC创作……见证AI极致生产力!

飞桨PaddlePaddle

人工智能 AIGC

原来低代码开发部署起来这么简单

伤感汤姆布利柏

前端 低代码 低代码开发

京东商品详情接口在电商行业中的重要性及实时数据获取实现

Noah

淘宝商品详情接口在电商运营中的应用实例

Noah

NFTScan | 11.27~12.03 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan

KubeWharf:解析云原生未来的分布式操作系统

数字扫地僧

KubeWharf

DevSecOps研讨会年终专场来啦!邀您共探如何打好DevOps基础,赋能创新

龙智—DevSecOps解决方案

如何通过追踪用户旅程,找到流失用户

Footprint Analytics

区块链游戏 Web 3.0

深度探索E3PO:360° 视频传输平台的前沿技术与应用

数字扫地僧

E3PO

手把手带你离线部署Walrus,体验极简应用交付

SEAL安全

应用交付 应用交付平台 12 月 PK 榜 Walrus

KubeWharf:基于Kubernetes的分布式操作系统,助力云原生化部署和管理

bug菌

Kubernetes 社区征文

智能LED屏幕未来升级方向

Dylan

个性化 定制化 LED显示屏 全彩LED显示屏 led显示屏厂家

2023年度项目深入探索:AI与大模型在实际应用中的全景

数字扫地僧

盘点那些国际知名的黑客(下篇)

禅道项目管理

互联网 黑客 计算机网络

HarmonyOS振动效果开发指导

HarmonyOS开发者

HarmonyOS

给 Web 前端工程师看的用 Rust 开发 wasm 组件实战 | 京东云技术团队

京东科技开发者

rust 前端 webassembly 前端组件

亚马逊云科技宣布推出四项Zero-ETL集成特性

财见

Dapp燃烧铸币模式系统开发丨智能合约技术开发

l8l259l3365

如何实现高效代码审查,赋能大规模开发

龙智—DevSecOps解决方案

代码审查

Wireshark中的ICMP协议包分析

小魏写代码

浪潮信息存储助力企业智能化变革

财见

大模型训练:预训练模型与数据标准化

百度开发者中心

深度学习 #人工智能 LLM

MYSQL EXPLAIN 执行计划 | 京东物流技术团队

京东科技开发者

MySQL 数据库 EXPLAIN EXPLAIN执行计划

紫龙游戏解锁Jira与Perforce的游戏开发行业实践

龙智—DevSecOps解决方案

紫龙游戏

数据“库”的增删改查

小齐写代码

优化开发者体验,推动API测试行业发展,SmartBear收购API设计和文档领域领导者Stoplight

龙智—DevSecOps解决方案

API

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