对于某些设计问题,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 模型”的文章中了解他的工作,并查看示例代码。
更多内容推荐
在.NET 中实现 Actor 模型的不同方式
Vaughn Vernon于上周发布了Dotsero,这是一个基于.NET的Actor模型工具包,它参照了Akka的API。今年早些时候,微软Research部门也发布了一个基于Actor模型的框架,Orleans的预览版。最近,Vaughn与Orleans项目的带头人,来自微软Research部门的Sergey Bykov,在twitter上对Orleans与Dotsero这两种不同的实现方式进行了一番讨论。
InfoQ 访谈:与 Akara Sucharitakul 一起探讨 Squbs
Squbs 是一个开源项目,能在大规模的级别上实现Akka应用程序的标准化和运维。
Clojure 和 Haskell——深度学习中的函数式语言之美
在深度学习系统的生产环境中,性能和安全性这两大问题促使公司倾向选择Clojure和Haskell等函数式编程语言。
如何使用统一架构简化全栈开发
本文如何使用统一架构来构建全栈应用程序,以及统一架构语言扩展Liaison。
响应式云 Actor 实现:一种可进化的事件网络
响应式云Actor是对Carl Hewitt所定义的Actor模型的一种应用,这种模型能够充分利用现代分布式系统的强大能力。本文介绍了一种响应式云Actor的实现,目的是处理一种复杂的业务场景,它的解决方案非常优雅,并且体现出了深度的思考性。
02|串讲:编程开发中,那些你需要掌握的基本概念
一文梳理:值/类型/指针/引用/函数/方法/闭包/接口/虚表/并发并行/同步异步/泛型
2021-08-22
07|冰川之下:深入 Go 高并发网络模型
很多人认为,Go语言是开发网络服务的极佳选择。这节课,我们就深入看看这背后的道理是什么。
2022-10-25
Dapr 旨在简化弹性和可移植微服务的创建
微软表示,Dapr封装了构建微服务的最佳实践,并使开发人员可以专注于他们的应用程序的业务逻辑。
Akka Actor 及其在商业智能数据服务中的应用
本文以eBay增强商业智能平台Nous, 以及业务指标异常检测平台等多个数据产品所使用的快速数据访问服务DataExpress为例,介绍Actor Model及其在企业级数据服务中的应用。
从编程历史看面向对象编程的本质与未来
2022-09-10
PyParallel:Python 的一个快速并行版本
By combining asynchronous I/O with a shared-nothing architecture, PyParallel research project is able to execute code in a parallel context faster than it can using CPython’s normal interpreter. And it does this without removing the GIL. The secret, no reference counting or garbage collection of any kind.
18|错误处理:为什么 Rust 的错误处理与众不同?
集百家之长的Rust错误处理,都做到了什么?
2021-10-04
深入浅出 Kotlin 协程
在很多场景下,围绕反应式流的函数式操作重构代码所带来的收益甚至超过了成本,所以协程应运而生,它最初是针对Android的一个替代方案。本文深入探讨了Kotlin的协程实现在幕后是如何工作的。
Joe Duffy 谈论安全并行机制的唯一性和不可变性引用
我们近期采访了《Concurrent Programming on Windows》一书的作者Joe Duffy,谈到了他在使用类型系统以确保安全并发方面的研究成果。这部分成果已经发表在一篇名为《Uniqueness and Reference Immutability for Safe Parallelism》(安全并行机制的唯一性和不可变性引用)的论文里。此次访问的缘由,是由于对这项研究项目的内容看起来还普遍存在着一些误解。
《通过 Actor 模型实现响应式消息处理模式》书评及与 Vaughn Vernon 的问答
在Vaughn Vernon的新作《通过Actor模型实现响应式消息处理模式》中,他为读者展示了如何使用这种模型以简化企业软件的开发。本书首先为读者介绍了Actor模型的基础,以及Scala和Akka的学习指南。随后,本书列举了一份包含多种模式的目录,从Actor模型的角度描述了在Gregor Hohpe与Bobby Woolf共同撰写的著作《企业集成模式》中所描述的大多数模式。
重磅!微软开源微服务构建软件 Dapr
Dapr是一种可移植的、事件驱动的运行时,与平台完全无关。为了使所有开发人员能够使用任何语言和框架轻松地构建可移植的微服务应用,无论是编写新代码还是迁移现有代码,我们很高兴地宣布将 Dapr 开源。
Akka 工具包 2.3 版本发布,支持 Java 8 和持久化
Akka工具包的最新版2.3.0版本发布,带来了持久化特性,支持有状态的Actor将其内部状态持久化。该版本也为支持Java 8的Lambda表达式做好了准备。
加餐|软件工程师在 AIGC 浪潮下的生存指南
这次加餐,我想通过我对AIGC技术的理解以及一些案例,简单分析一下软件工程师的生存指南,和你聊聊这件事是否值得我们“焦虑”。
2023-05-22
虚拟座谈会:反应式编程
反应式编程是当前非常热门的话题:InfoQ采访了反应式编程的三位提倡者,就他们的程序库和框架是如何完成反应性及其对开发人员的意义展开了讨论。这三位参与者分别是:Viktor Klang(Akka)、Timothy Baldridge(Core.Async )和Jafar Husain(RxJava)。
NIO:手撸一个简易的主从多 Reactor 线程模型
这节课,我们会通过对NIO与Netty的详细解读,让你对网络编程有一个更直观的认识。
2022-06-27
暂无签名
推荐阅读
Ballerina Swan Lake:10 个令人瞩目的云原生编程语言特性
Swift 意欲成为无数据竞争的并发编程语言
15. Flink 的基本编程
2023-09-08
Rust 从 0 到 1- 并发 - 线程间消息传递
2021-07-16
一文解决现代编程语言选择困难:响应式编程
5、AIO 异步非阻塞式、BIO 与 NIO 总结
2023-09-27
5、手写框架 v4 面向对象实现
2023-09-28
电子书
大厂实战PPT下载
换一换 党宇航 | VAST 产品负责人
汪晟杰 | 腾讯云 产品专家
杨青 | 度小满金融 技术委员会执行主席、数据智能应用部总经理,TGO 鲲鹏会学员
推荐阅读
Ballerina Swan Lake:10 个令人瞩目的云原生编程语言特性
Swift 意欲成为无数据竞争的并发编程语言
15. Flink 的基本编程
2023-09-08
Rust 从 0 到 1- 并发 - 线程间消息传递
2021-07-16
一文解决现代编程语言选择困难:响应式编程
5、AIO 异步非阻塞式、BIO 与 NIO 总结
2023-09-27
5、手写框架 v4 面向对象实现
2023-09-28
评论