《七周七并发模型》第五章Actor总结-阿里云开发者社区

开发者社区> ali清英> 正文

《七周七并发模型》第五章Actor总结

简介:
+关注继续查看

购买本书 作者:Paul Butcher   译者:黄炎  出品方:图灵  出版社:人民邮电出版社 (感谢图灵授权并发编程网发布此文)

5.5 复习

Smalltalk的设计者、面向对象编程之父Alan Kay曾经这样描述面向对象的本质①:很久以前,我在描述“面向对象编程”时使用了“对象”这个概念。很抱歉这个概念让许多人误入歧途,他们将学习的重心放在了“对象”这个次要的方面。
真正主要的方面是“消息”……日文中有一个词ma,表示“间隔”,与其最为相近的英文或许是“ interstitial”。创建一个规模宏大且可生长的系统的关键在于其模块之间应该如何交流,而不在于其内部的属性和行为应该如何表现。这段话也概括了使用actor模型进行编程的精髓——我们可以认为actor模型是面向对象模型在并发编程领域的扩展。 actor模型精心设计了消息传输和封装的机制,强调了面向对象的精髓,可以说actor模型非常“面向对象”。

优点

actor有许多优良的特性,适用于解决多种并发问题。消息传输和封装虽然多个actor可以同时运行,但它们并不共享状态,而且在单个actor中所有事件都是串行执行的。所以关于并发,只需要关注于多个actor之间的消息流即可。

对开发人员来说这是个重大利好。每个actor可以被单独测试,而且当测试覆盖了某个actor的消息类型和消息顺序时,就可以确定这个actor非常可靠。如果发现了一个与并发相关的bug,也就知道重点应该放在actor之间的消息流上。

容错
使用actor模型的程序天生具有容错性。这不仅会让程序更加强壮,而且(通过“任其崩溃”的哲学)会让代码更加简洁明了。

分布式编程

actor模型支持共享内存模型,也支持分布式内存模型,这就带来了很多优点。首先, actor模型几乎可以解决任何规模的问题。我们不需要将问题局限于用一个系统解决。其次, actor模型可以解决地理分布式问题。对于不同部分需要部署在不同地理位置的软件,Actor模型是个极佳的选择。最后,分布式是软件具有容错能力的基石。

缺点

尽管使用actor模型的程序比使用线程与锁模型的程序更容易debug,但actor模型仍会碰到死锁这一类的共性问题,也会碰到一些actor模型独有的问题(例如信箱溢出)。

类似于线程与锁模型, actor模型对并行也没有提供直接支持。需要通过并发的技术来构造并行的方案,这样就会引入不确定性。而且,由于多个actor并不共享状态,仅通过消息传递来进行交流,所以不太适合实施细粒度的并行。

其他语言

与许多伟大的思想一样, actor模型也由来悠久——20世纪70年代Carl Hewitt首次提出这个模型。 Erlang无疑为布道actor做了最大的贡献。比如Erlang的创始人Joe Armstrong也是“任其崩溃”哲学的先驱。大部分流行的编程语言都提供了一个actor库,特别是Akka库①为Java和其他运行于JVM的语言提供了对actor模型的支持。如果想深入学习Akka,建议阅读本书的奖励章节②,其中描述了如何用Scala进行actor编程。
——————————
① http://akka.io
② http://media.pragprog.com/titles/pb7con/Bonus_Chapter.pdf (此文有兴趣翻译的可以联系并发编程网

结语

actor模型是应用最广泛的编程模型之一——不仅提供了并发支持,还支持分布式、错误检测和容错。当面对越来越大的分布式需求时,该模型是解决问题的绝佳选择。

下一章我们将学习通信顺序进程( Communicating Sequential Processes, CSP)。虽然CSP模型看上去类似于actor模型,但区别在于: actor模型的重点在于参与交流的实体,而CSP模型的重点在于用于交流的通道。因此使用CSP模型将是另一番体验。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Akka并发编程——第六节:Actor模型(五)
本将主要内容: 1. !消息发送,Fire-and-Forget消息模型 2. ?消息发送,Send-And-Receive-Future消息模型 Akka提供了两种消息模型:fire-and-forget和Send-And-Receive-Future。fire-and-forget是一种单向消息发送模型,指的是异步发送消息,通过异步发送消息且消息发送后可以立即返回,
2473 0
Akka并发编程——第七节:Actor模型(六)
主要内容: 1. Typed Actor定义 2. Typed Actor创建 3. 消息发送 1. Typed Actor定义 Akka中的Typed Actor是Active Objects设计模式的实现,Active Objects模式将方法的执行和方法的调用进行解耦合,从而为程序引入并发性。Typed Actor由公用的接口和对应实现两部分构成,其后面深层次
2686 0
Akka并发编程——第三节:Actor模型(二)
本节主要内容: Actor API解析 1. Actor API解析 Actor中的主要成员变量和方法定义如下: package akka.actor trait Actor extends scala.AnyRef { type Receive = akka.actor.Actor.Receive //context变量暴露当前Actor的上下文信息
2901 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
Akka并发编程——第八节:Actor模型(七)
本节主要内容 停止运行Typed Actor 当Typed Actor不再需要时要将其停止,有3种方法停止Typed Actor的运行: (1)通过system.shutdown()停止ActorSystem中所有的Typed Actor; (2)调用TypedActor(system).stop(mySquarer)停止指定的Typed Actor;
3697 0
血泪总结!创业公司CTO要避免哪些坑?
对于想做 CTO 的人,或者正在做 CTO 的人,或者做技术管理的人而言,技术的锤炼和知识的提升非常重要。本文作者将向大家讲述创业中踩过的那些坑和他们的血泪总结。 一、技术的锤炼 先让我从印象最深的一次宕机讲起。
34229 0
6月19日云栖精选夜读:血泪总结!创业公司CTO要避免哪些坑?
对于想做 CTO 的人,或者正在做 CTO 的人,或者做技术管理的人而言,技术的锤炼和知识的提升非常重要。本文作者将向大家讲述创业中踩过的那些坑和他们的血泪总结。 一、技术的锤炼 先让我从印象最深的一次宕机讲起。
4228 0
10种传统机器学习算法,阿里工程师帮你总结了
这篇文章主要介绍推荐系统中传统机器学习算法,写这篇文章的主要目的是对业界主流推荐算法的一些总结,方便大家对主流推荐算法的底层实现有的了解,从而在业务实践过程中更好地理解算法,运用算法。
1543 0
个人总结:关于使用design库中FloatingActionButton等控件的说明
主要看博客平台上很少提及的要说的问题,所以这里写出来做个标识,供大家参考。 文章纯属个人总结,以后会出这些控件的使用说明,这里只是说下要使用design库中的各种控件的注意的地方: 1 、使用这些控件大家应该都知道所在的activity都必须继承app...
569 0
+关注
ali清英
方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
614
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载