50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

Xcode for Mac(开发工具)v14.3.1正式版

Rose

Xcode Mac版 Xcode中文版 Xcode破解版

如何从零实现一个简单的Spring Bean容器

Java你猿哥

Java spring ssm Spring Bean Java web

简单好用的便利贴工具:Sticky 激活版

真大的脸盆

Mac Mac 软件 便利贴工具 便利贴软件

火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作

字节跳动数据平台

数据湖 数据化 数据平台 大数据分析 DataLeap

宝兰德应用服务器软件与华为云GaussDB完成兼容互认证

YG科技

[EuroSys2023 Best Poster] 面向动态图的极低时延GNN推理采样服务

阿里云大数据AI技术

人工智能 机器学习 推理 企业号 6 月 PK 榜 DGS

从BeyondCampus最佳实践,洞察高校零信任发展趋势

权说安全

你还在用 BeanUtils?试试 MapStruct,优雅的对象转换解决方案!

Java你猿哥

Java ssm map

怎么看阿里拆中台这件事

agnostic

中台架构

synchronized和Lock有什么区别?

javacn.site

爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了

Java你猿哥

Java 微服务 微服务架构 Spring Cloud ssm

开源赋能 普惠未来|OpenHarmony诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源 OpenHarmony 开放原子

【2023华为云CodeArts Build 实战训练营】云端实战-玩转编译构建

云计算 华为云 华为开发者大会2023

技术驱动,数据赋能,华为云GaussDB给世界一个更优选择

YG科技

设计模式之不一样的责任链模式

越长大越悲伤

Java 设计模式

Microsoft Remote Desktop下载,微软远程连接工具

Rose

microsoft remote desktop 微软远程桌面连接工具 mac远程链接

开源赋能 普惠未来|腾讯寄语2023开放原子全球开源峰会

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子

Java上进了,JDK21 要来了,并发编程再也不是噩梦了

Java你猿哥

Java jdk ssm

如何在企业中培养平台工程文化?

SEAL安全

平台工程 平台工程文化

mac高质量图像浏览处理软件 GraphicConverter 12 v12.0.3(6140)中文直装版

Rose

GraphicConverter 12中文 GraphicConverter破解 mac图像浏览器 GraphicConverter下载

Nautilus Chain上首个DEX PoseiSwap即将开启IDO,潜力几何?

西柚子

写给程序员的可逆计算理论辨析补遗

canonical

低代码 可逆计算 范畴论

硬核!力扣官方首发了这套1568页LeetCode算法刷题笔记(彩页版)

Java你猿哥

面试 算法 LeetCode ssm

深度解析Seata AT 模式中性能优化与隔离保障的平衡之道

Java你猿哥

Java 数据 ssm 脏读

行业DBA走进华为,共建数据库生态

YG科技

Focus Matrix for Mac(智能任务管理器) v1.6.1激活版

Rose

Focus Matrix Focus Matrix破解 focus matrix mac激活版 智能任务管理器

强渡大渡河!华为云GaussDB支撑华为MetaERP系统全面替换

YG科技

Go 语言流行 ORM 框架 GORM 使用介绍

江湖十年

后端 ORM框架 ORM Go 语言 gorm

App Cleaner & Uninstaller:mac专业的系统清理优化工具

Rose

App Cleaner 系统清理工具 苹果mac系统优化 App Cleaner 破解

华为云GaussDB以技术创新引领金融行业分布式转型

YG科技

国产自研数据库是更新换代首选

YG科技

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