【转载】actor 模型的优缺点分析介绍

      actor 模型是 1973 年就提出的一个分布式并发编程模型,在 erlang 语言中得到广泛支持和应用。目前 java中 也出现了很多支持 actor模型的库:akka、killim、jetlang等等,其中 akka 是使用 scala 写的,有 scala 和 java 两套使用接口;killim 需要对编译出来的 class 文件进行后处理。

最近项目需要架构整改,以支撑后续的发展,正在考虑是否采用 actor 模型。

先收集点资料,这两天好好分析一下。 

actor 模型参考维基百科定义(http://en.wikipedia.org/wiki/Actor_model):
actor 是一个计算实体,当其收到消息时,可以并发执行如下操作:

  • 发送有限数量的消息给其他 actor
  • 创建有限数量的新 actor
  • 指定收到下一消息时的行为

      ACE 的 reactor 模型是通过注册/回调方式进行驱动的程序开发模式,先注册自己关注什么事件,然后反应堆就会在该事件发生时回调你。这实际上与 actor 模型有些类似。reactor 在维基百科定义如下(http://en.wikipedia.org/wiki/Reactor_pattern):
      reactor 是一种设计模式,用于一到多个输入并发向一个服务处理器发送请求时进行事件处理。服务处理器将收到的请求同步分发到相应的请求处理器上。
      按照定义,所有 reactor 系统都是单线程的,但可以应用到多线程环境中。reactor 模型的特点是控制流反转(inversed flow of control)

proactor 模型可以认为是 reactor 模型的一种异步实现,reactor 要求收到请求后同步分发的请求处理器上,而 proactor 允许异步处理,定义(http://en.wikipedia.org/wiki/Proactor_pattern):
      proactor 也是事件处理的设计模式,在这种模式中,长时间运行的活动在单独的异步过程中处理,异步处理过程技术后,一个 completion handler 被调用。这个有些类似 akka actor 模型中,future 对象的 onComplete、onSuccess、onFailed 方法。
      proactor 的 ace 实现(http://www.cs.wustl.edu/~schmidt/PDF/proactor.pdf

线程为啥不好?为啥要用event代替?http://www.stanford.edu/~ouster/cgi-bin/papers/threads.pdf
scala 的好书(programming in scala)http://www.cs.uwaterloo.ca/~brecht/courses/854-Scalable-Systems-Software/Possible-Readings/scala/ProgrammingInScala.pdf

时间: 2024-12-26 18:37:11

【转载】actor 模型的优缺点分析介绍的相关文章

js闭包所用的场合以及优缺点分析

  这篇文章主要介绍了js闭包所用的场合以及优缺点分析,十分的详细使用,有需要的小伙伴可以参考下. 先上段代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //函数a function a() { var i=0; //函数b function b() { alert(++i); } return b; } //函数c var c = a(); c(); 代码特点: 1.函数b嵌套在函数a内部; 2.函数a返回函数b. 代码中函数a的内部函数b,被函数a外面的一个变量

基于”有限状态机模型“的链路分析设计

背景介绍 为什么会有这一篇文章? 在笔者过去几年的数据分析系统的开发中,接触了大量的订单维度的不同状态流转情况下的数据分析,在最近的实战中,发现可以跳出业务系统,在高阶的抽象层面,落地一套东西,这一套设计和业务无关,说白了,任何业务的单据的不同状态流转的多维分析,都可以用这一套思路落地,如果对你有用,最好,如果无用,就当抛砖引玉了 什么是数据分析的模型? 数据分析的模型,在我看来是数据分析的最高阶的抽象,可能不是java中的object,可能不是db中的表,但是在无形之中指导者我们的系统设计 笔

软件安全构建成熟度模型演变与分析

前言 软件安全开发主要是从生命周期的角度,对安全设计原则.安全开发方法.最佳实践和安全专家经验等进行总结,通过采取各种安全活动来保证尽可能得到安全的软件.但是,能否将安全开发的概念整合到企业原有的开发过程中,通常取决于企业规模.资源(时间.人才和预算),以及管理层支持等各种因素.如果方式不当,很可能造成高昂的成本甚至整合失败. 建立软件安全构建成熟度模型能够帮助企业理解安全开发举措的关键要素,根据开发团队的成熟度水平确定各种安全举措的优先级,从而控制上述因素的影响. 本文介绍了BSIMM.SAM

性能优化之几种常见压测模型及优缺点 | 陈显铭

上一篇讲的是<性能优化的常见模式及趋势>,今天接着讲集中常见的压测模型. 通过上一章我们大概知道了性能优化的一些招式,但是怎么发现有性能问题,常见的模式还是需要压测.下面列举进行列举. 压测模型抽象 可以把压测模型抽象为上图的模型. 压测环境准备 压力机资源 被压测系统 依赖资源(压测数据,第三方依赖) 压测策略准备 压测需要达到的目标(比如期望达到的QPS,稳定性要求等) 压测场景(业务场景选取.组合) 压测策略(逐步加压.脉冲.并发量等) 压测执行闭环 压力机压测 分析程序收集压测数据(R

Akka v2.4.11 发布,Actor 模型开发库

Akka v2.4.11 发布了. Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. 改进内容,请点击此处查看.更多详情请关注发行日志和提交记录. 文章转载自 开源中国社区 [http://www.oschina.net]

[文档]基于P2P的云计算模型及其安全性分析

基于P2P的云计算模型及其安全性分析 沈静波  李金龙 文章通过将P2P技术和云计算相结合,提出了一种可靠的.可扩展的.低成本的文件共享模型PA-Cloud.该文介绍了PA-Cloud的文件下载和更新过程,并对系统的安全性进行了分析.通过对PA-Cloud进行对比实验表明,PA-Cloud可以有效提高系统的可扩展性,降低服务提供商的成本. 关键词: 对等网络 云计算 文件共享 可扩展性   temp_12060215109101.pdf

ActorLite:一个轻量级Actor模型实现(下)

在上一篇文章中,我们实现了一个简单的Actor模型.如果要构建一个Actor,便只是 简单地继承Actor<T>类型并实现其Receive方法即可.在上次文章的末尾,我们使 用C#演示了该Actor模型的使用.不过现在我们将尝试一下F#. C#使用Actor模型的缺陷 在Erlang中,每个消息都使用模式匹配来限制其"结构"或"格式",以此表达不同 含义.C#类型系统的抽象能力远胜于Erlang,但是Erlang的"动态性"使得开发人

ActorLite:一个轻量级Actor模型实现(中)

从上一篇文章的反响来看,似乎大家对于这一话题并没有太大兴趣.而这篇文章将会 为大家带来一个简单但完整的Actor模型实现.此外,在下一篇文章中--可能会出现一 些让您觉得有趣的东西.:) 任务分配逻辑 如上文所述,这次要实现的是一个非常简单的Actor模型,使用基于事件的分配方式, 直接把任务交给.NET自带的线程池去使用.不过我们又该什么时候把一个Actor推入线程 池的执行队列呢?这其实取决于我们执行Actor的两个"基本原则": 如果Actor的邮箱中包含消息,那么要尽早执行.

ActorLite:一个轻量级Actor模型实现(上)

Actor模型 Actor模型为并行而生,具Wikipedia中的描述,它原本是为大量独立的微型处理器所 构建的高性能网络而设计的模型.而目前,单台机器也有了多个独立的计算单元,这就是 为什么在并行程序愈演愈烈的今天,Actor模型又重新回到了人们的视线之中了.Actor模 型的理念非常简单:天下万物皆为Actor,Actor之间通过发送消息进行通信.Actor模型 的执行方式有两个特点: 每个Actor,单线程地依次执行发送给它的消息. 不同的Actor可以同时执行它们的消息. 对于第1点至今