写点什么

使用 TPL DataFlow 在 C#中轻松创建 Actor

2013 年 11 月 25 日

对于某些设计问题,Actor 可以让一切变得不同。 Actor 是一种可以响应和发送消息的独立实体。某种程度上,它就像是在另一个进程中运行属于它自己的小程序。但对于没有原生支持 Actor 的语言来说,构建 Actor 可能会非常困难。

出现的最主要的问题是线程管理。我们通常并不想拦截消息发送者的线程,因为那会给人一种方法调用的语义。且为每个 Actor 分配一个单独的线程并不会使程序比以前扩展多少,而在上下文切换时,线程就成了一个真正的问题。

Johan Olsson 在 TPL DataFlow 的基础上构建了自己的 Actor 库,为 C#解决了这一困境。TPL DataFlow 旨在通过异步方法将操作连接在一起。在 Block 之间传递的消息可能会被缓存、分组、分离、转换,或根据应用程序的语义和性能需要进行其他操作。

该框架的核心是一个封装了 ActionBlock 的抽象类 Actor。ActionBlock 在内部处理所有的线程问题,开发者不需要关心线程或任务。之所以是线程安全的,是因为 ActionBlock 默认会被序列化。如果同时发送两条消息,ActionBlock 会缓存第二条消息,直到第一条消息处理完毕。这个行为可以通过 ExecutionDataflowBlockOptions 进行修改。

你可以在 Johan Olssion 的“使用TPL DataFlow 在C#中实现Actor 模型”的文章中了解他的工作,并查看示例代码。

查看英文原文: Actors Made Easy with C# and TPL DataFlow

2013 年 11 月 25 日 07:231359
用户头像

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

关注

评论

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

01|PPT教程|为什么我要写这个课程?

青城

PPT 青城 PowerPoint 3月日更

5分钟介绍AI人工智能,机器学习和深度学习,John 易筋 ARTS 打卡 Week 40

John(易筋)

ARTS 打卡计划 arts

程序员成长第二十二篇:做任务分配时,要考虑员工的成长。

石云升

项目管理 程序员成长 28天写作 职场经验 3月日更

LinqToExcel.Extend 源码分析

happlyfox

28天写作 3月日更

GitHub开源的超逼真俄罗斯方块游戏

不脱发的程序猿

GitHub 开源项目 28天写作 俄罗斯方块游戏 3月日更

Docker 教程(一):Docker 是什么

看山

Docker DevOps

恋物志(三):“美丽到牙齿”的智能硬件圈地运动

脑极体

阶段性正确

广之巅

阶段性正确

力扣(LeetCode)刷题,简单题+中等题(第20期)

不脱发的程序猿

LeetCode 力扣 28天写作 算法面经 3月日更

SICP 习题解答 1.9

十元

android面试!Android事件体系全面总结+实践分析,大牛最佳总结

欢喜学安卓

android 程序员 面试 移动开发

Android入门你值得拥有!手持4个大厂offer的我,附面试题答案

欢喜学安卓

android 程序员 面试 移动开发

学习曾国藩:职场咸鱼的翻身之法

boshi

七日更 职业生涯

算法攻关 - 验证回文串 (O(n))_0125

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 验证回文串

SICP 习题解答 1.10

十元

容器 & 服务:K8s 与 Docker 应用集群 (三)

程序员架构进阶

Docker kubernet 容器化 28天写作 3月日更

自动化测试环境搭建

IT蜗壳-Tango

IT蜗壳自动化 21天

Wireshark数据包分析学习笔记Day4

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

【自动化】Day01

IT蜗壳

迷宫算法(DFS)

大忽悠

3月日更

人生如戏,戏如人生——敏捷剧本杀玩后感

Bruce Talk

敏捷 Agile

第一章-认识产品经理作业

阿珍爱上阿强

产品经理 JD 财务

云边协同

lenka

云计算 产品经理 3月日更

两会热议区块链,未来将呈现四大趋势

CECBC区块链专委会

区块链

python常用库简介

张鹤羽粑粑

28天写作 3月日更

Python 环境搭建

依旧廖凯

Python 28天写作 3月日更

IntellIJ IDEA 命令行运行一个 HelloWorld Python 程序

HoneyMoose

第1天--文本与变量

喵叔

C# .net

LeetCode题解:279. 完全平方数,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

程序员是如何解决问题的

ES_her0

28天写作 3月日更

架构师训练营 4 期 第10周

引花眠

架构师训练营 4 期

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

使用TPL DataFlow在C#中轻松创建Actor-InfoQ