Actor_更轻量化的并发处理模型react
JAVA在JDK5以前写并发程序是很是麻烦的,你要么继承Thread类,要么实现Runnable接口,同步机制的力粒度也很粗。JDK5以后,引入了Concurrent包,增长了不少并发特性的支持,如Callable<T>接口,可使用Future<T>来获取每一个任务返回的结果,而原来的Runnable是没有这个能力的。还有就是更细粒度的锁,如Lock接口。程序员
Actor Model最先是在上世纪70-80年代就被提出来了,是用来编写并行计算或分布式系统的高层次抽象,让程序员没必要为多线程模式下共享锁而烦恼, Erlang 最早实现Actor Model,SCALA参考了这个实现。多线程
Actors将状态和行为封装在一个轻量的进程/线程中,可是不和其余Actors分享状态,每一个Actors有本身的封闭环境,当须要和其余Actors交互时,经过发送事件和消息,发送是异步的,非堵塞的(fire-and-forget),发送消息后没必要等另外Actors回复,也没必要暂停,每一个Actors有本身的消息队列,进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,能够创建性能很好的事件驱动系统。架构
SCALA实现Actor Model有两种实现方式:并发
基于线程的实现:相似JAVA中的thread方式,经过定义一个thread-specific方法(Scala中的Actor类的actor方法/JAVA中的Thread类的run方法),将一个线程和actor绑定;框架
基于事件的实现:经过定义一个线程池和一系列的事件处理函数,将事件处理函数做为actor方法,实现多个actor共享一个线程池;异步
一般状况下两种实现模型各有本身的优缺点,线程模型简单易用,但效率不高;而事件模型高效但难于设计。为了适应这两种模型,Scala的Actor库实现了两个不一样操做:receive和react,两个操做都是试图从actor的邮箱中提取消息,而后经过模式匹配的方式调用处理函数,可是receive是基于线程模型的,而react是基于消息模型的。分布式
AKKA平台是TypeSafe发布并维护的轻量级Actor框架,相对于SCALA原生定义的Actor,其具备以下的特色:函数
1.更加简单的并发策略Simpler Concurrency,经过Actors STM & Transactors可以简化编写可靠的并行计算性能
2.EDA架构Event-driven Architecture,完美的异步事件驱动架构,不会堵塞
3.真正的可伸缩性,使用异步消息在多核以及多个节点之间扩展
4.容错性,重视失败。Let it crash!
5.远程透明性,底层可使用NETTY或是THRIFT来通信
6.集群管理能力,Cluster机制是AKKA20后提供的新功能
AKKA系统特别适合在云端或是基于多刀片系统的分布式计算,具备很强的Scale out的能力。
====================END====================