以视频分析为主要载体的人工智能算法在泛安防场景中是怎样落地的?>> 了解详情
写点什么

以 Akka 为示例,介绍 Actor 模型

  • 2014 年 11 月 03 日
  • 本文字数:1145 字

    阅读完需:约 4 分钟

许多开发者在创建和维护多线程应用程序时经历过各种各样的问题,他们希望能在一个更高层次的抽象上进行工作,以避免直接和线程与锁打交道。为了帮助这些开发者, Arun Manivannan 编写了一系列的博客帖子,在目前总共六篇帖子中,他通过大量的图片及一些简单的 Akka 示例,解释了 Actor 模型的原理,并进一步探索了 Akka 工具所提供的各种特性。

Arun 首先从整体上对 Actor 进行了介绍,他在示例中将 Actor 比作了一群人:

你可以将 Actor 当作是一群人,他们互相之间不会面对面地交流,而只是通过邮件的方式进行沟通。

传递消息是 Actor 模型的基础,Arun 以一名学生和一位教师举例,描述了以下基础流程:

  • 一名学生给一位教师发送了一封邮件,邮件一旦发送之后,就不能够修改了。
  • 该教师会在她认为适合的时机去检查她的邮箱,从而收到这封邮件。
  • 该教师稍后会寄一封回信给该学生,这封回信也是一旦发送就不可变的。
  • 该学生在一段时间后决定去检查一下他的邮箱,从而收到了回信,(他可没有一直守候在邮箱旁等待回信哦)。

如果信息是单向的,那么它一旦送出之后并不会期待或等待任何响应。除了这种情况之外,Actor 都能够在一个请求 - 响应周期内,为发送者发回一个响应消息。

接下来的示例讲解了并发的情况,示例中包含了多名学生和多位教师,每一名学生都会向所有教师发送邮件。这种情况与之前的示例并没有不同,因为每个参与者都分别拥有自己的邮箱,而且每封邮件都会按照它们到达邮箱的顺序被阅读。如果发生了某位教师不能接收邮件的情况,那么一位新的教师会替代他进行接收,从而实现故障转移。

一个 Actor 的生命周期并不复杂,首先通过构造函数进行创建,随后调用它的 preStart 方法,而 Actor 准备开始接收消息时,再调用它的 receive 方法。最后,调用 postStop 方法将 Actor 置为终结状态。Arun 还提到,Actor 的生命周期与一个 Java servlet 非常相似,仅存在着一些细微的差异。

Actor 之间的关系是层次结构型的,每个 Actor 都从属于另外一个 Actor。Arun 将这种结构与文件系统进行了比较,在文件系统中存在着一些顶层文件夹,而当你依照文件夹的层次结构进入内部时,文件夹的总数也在不断上升。通常来说,父 Actor 创建子 Actor 以处理一些子任务,或者是让子 Actor 在隔离的情况下去处理一些特别容易出错的任务,这样可以保证系统在故障发生时能够恢复状态。Actor 的容错性的关键部分来自于父 Actor 管理子 Actor 生命周期的能力。

Arun 还描述了一些其它方面的内容,包括日志记录、测试与配置。你可以从 Github 下载一个包含了完整源代码的示例项目。

除了用于 Java 与 Scala 的 Akka 项目之外,还有支持其它平台的 Actor 模型的实现,比如在.NET 平台下就存在着两种不同实现方式的Actor 项目。

查看英文原文: An Introduction to Actor Model, with Examples in Akka

2014 年 11 月 03 日 05:1819037
用户头像

发布了 428 篇内容, 共 155.3 次阅读, 收获喜欢 27 次。

关注

评论

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

极客时间 - 架构师训练营 - week1 - 食堂就餐卡系统设计

毛聪

极客时间 极客大学架构师训练营 食堂就餐卡系统设计

架构训练营第一周学习总结

陈靓-哲露

架构师训练营No.1周总结

连增申

产品路线图–您的产品战略路径指南

涛哥

敏捷 产品经理

食堂就餐卡系统设计文档

架构5班杨娟Jessie

极客大学架构师训练营

plantUML的安装和使用

南宫煌

极客大学架构师训练营

食堂就餐卡系统设计

傻傻的帅

系统设计

架构与UML总结

GalaxyCreater

区块链技术如何应用于版权保护?

CECBC区块链专委会

区块链技术 维权 著作权 版权保护 侵权

设计模式之单件模式

Geek_896619

Java 设计模式

week1-食堂就餐卡系统设计

不在调上

架构师训练营-作业2-学习总结

狂奔嘀兔纸

极客大学架构师训练营

架构师训练营学习总结

王凯

程序员为什么技术这么厉害,赚得钱却不多?

金刚小书童

程序员 职业规划 技术管理

2020/06/09 架构师学习心得

架构5班杨娟Jessie

极客大学架构师训练营

极客大学架构师训练营第一周学习总结

竹森先生

学习 架构设计 极客大学架构师训练营

我们需要干货吗?

Neco.W

能力提升 经验分享 干货

架构师训练营第一周作业

陈靓-哲露

带你了解 Ribbon 负载均衡器的实现

张晓辉

Spring Cloud

极客时间第0期架构师训练营第一周作业1

2流程序员

作业一:食堂就餐卡系统设计

Safufu

基于UML的食堂就餐卡系统设计

王海

极客大学架构师训练营

第一周作业--食堂就餐卡系统系统

南宫煌

极客大学架构师训练营 UML

第一周学习总结

CP

架构师训练营-学习总结-第一讲

吕浩

学习 极客大学架构师训练营

架构师训练营学习心得【第一周】

王海

极客大学架构师训练营

食堂就餐卡-系统设计文档

王凯

《Web全栈实用编程》一书征集意见

老魚

程序员 前端 Web 后端 全栈

食堂就餐卡系统架构设计文档

冯凯

极客大学架构师训练营

第一周学习总结

王铭铭

第一周学习总结

冯凯

极客大学架构师训练营

以Akka为示例,介绍Actor模型-InfoQ