actor model是1973年就提出的一个分布式并发编程模型,在erlang语言中得到广泛支持和应用。目前java中也出现了很多支持actor模型的库:akka、killim、jetlang等等,其中akka是使用scala写的,有scala和java两套使用接口;killim需要对编译出来的class文件进行后处理。
最近项目需要架构整改,以支撑后续的发展,正在考虑是否采用actor模型。
actor模型有什么优点和缺点?
actor模型和ACE reactor(反应堆)有什么异同?
actor模型和proactor模型有什么异同?
actor模型对大型分布式并发开发有什么好处?
tumblr说其底层的RPC框架finagle最初是基于actor模型的,后来为什么不用了?
http://www.acejoy.com/thread-4065-1-1.html
先收集点资料,这两天好好分析一下。
actor模型参考维基百科定义(http://en.wikipedia.org/wiki/Actor_model):
actor是一个计算实体,当其收到消息时,可以并发执行如下操作:
1. 发送有限数量的消息给其他actor
2. 创建有限数量的新actor
3. 指定收到下一消息时的行为
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[www.pms.cc 来源]