写点什么

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

  • 2013-11-25
  • 本文字数:553 字

    阅读完需:约 2 分钟

对于某些设计问题,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:232015
用户头像

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

关注

评论

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

从React源码角度看useCallback,useMemo,useContext

flyzz177

React

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

真希望你也明白runtime.Map和sync.Map

面向加薪学习

面试 并发 源码阅读 go语言 Map集合

云智慧蝉联中国IT统一运维ITSM软件市场第一!

云智慧AIOps社区

ITSM IT运维 运维管理

JDK自带命令优化

@下一站

代码优化 12月日更 12月月更 jvm优化 java程序优化

前端工程师leetcode算法面试必备-简单的二叉树

js2030code

JavaScript LeetCode

Java开发如何通过IoT边缘ModuleSDK进行协议转换

华为云开发者联盟

Java 开发 华为云 12 月 PK 榜

JavaScript刷LeetCode心得

js2030code

JavaScript LeetCode

GaussDB(DWS)运维 :遇到truncate执行慢,怎么办

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

ArgoDB 5.1 正式发布:多模融合、实时分析和数据安全多重升级

星环科技

开源依赖项管理指南

SEAL安全

12 月 PK 榜 依赖管理 传递依赖 开源依赖项

【其他】快出数量级的性能是怎样炼成的

No8g攻城狮

MySQL sql 数据库·

2022年11月中国汽车智能网联月度观察

易观分析

汽车 智能网联

架构实战营 2-5 微信红包分析随堂测验

西山薄凉

「架构实战营」

【IntelliJ IDEA】【SVN】SVN详细的介绍和Idea中如何使用SVN

No8g攻城狮

ide svn Git Submodule git fetch IDEA DeBug

架构实战营 2-6 钱包高可用实战随堂练习

西山薄凉

「架构实战营」

从React源码来学hooks是不是更香呢

flyzz177

React

react源码分析:实现react时间分片

flyzz177

React

云原生时代数据库运维体系演进

vivo互联网技术

数据库 运维 故障自愈

易观分析潘玉宇:信贷全流程化监管将成行业发展重点,银行间联合风控程度将逐渐加深

易观分析

银行 普惠金融

带你实现react源码的核心功能

flyzz177

React

你可能需要的6个React开发小技巧

千锋IT教育

Mybatis源码解析之执行SQL语句

京东科技开发者

缓存 mybatis sql 源码学习 数据库·

react源码分析:babel如何解析jsx

flyzz177

React

react源码中的生命周期和事件系统

flyzz177

React

教你用JavaScript实现点击支付框

小院里的霍大侠

JavaScript 小白 编程开发 实战案例 初学者

Verilog 时延与过程结构

芯动大师

Verilog语法 Verilog延时 Verilog过程结构

Flink核心组件

穿过生命散发芬芳

flink 12月月更

跳板攻击中如何追踪定位攻击者主机(上)

郑州埃文科技

数据安全 网络攻击 跳板攻击

超1800万累计观看,多次占据热榜前列……“无障碍字幕直播间”带来的远不止这些!

猿始人

星环科技TDS 2.4.0 发布: 数据开发、数据治理、数据运营套件能力再次升级

星环科技

使用TPL DataFlow在C#中轻松创建Actor_.NET_Jonathan Allen_InfoQ精选文章