Akka简介

虽然Akka基于Scala而非Java语言编写而成,但由于Scala最终还是被编译为Java字节码并运行在JVM之上,所以我们可以认为Akka属于Java领域。Akka官方对Akka的介绍如下。● 是对并发、并行程序的简单的高级别的抽象。

● 是异步、非阻塞、高性能的事件驱动编程模型。

● 是非常轻量的事件驱动处理机制(1GB内存可容纳约270万个Actor)。

我们知道,一个实际的Actor系统是由许多个Actor实例组成的一个复杂的树状结构,父Actor负责子Actor的生命周期并对它们实施必要的监管与控制,Akka项目则更加清晰地描述和定义了与之相关的编程模型。

Akka简介_第1张图片

从上图中还可以看到,Akka中的每个Actor都有一个Path(路径),对于一个Actor子系统ActorSystem(类似于μJavaActors中的一个ActorManager,维护一个Actor命名空间)来说,顶级根路径是“/”,下面有两个子路径,分别是user(用户空间)路径与system(系统空间)路径,在前者的路径分支上挂接了我们自己开发的Actor,后者则是Akka本身的系统级的Actor所在的路径。

如下所示是一个典型的Akka Actor的Path层级的结构示意图,我们看到每个下一层级的Actor的Path全路径的名称都是从根节点出发的完整路径,类似于文件目录结构的设计思路。而将user空间与system空间分离的做法,又借鉴了Linux内核的思想,将系统级的Actor识别出来,从而针对性地实现了精细化调度及增强系统内核的稳定性与容器能力。

Akka简介_第2张图片Akka简介_第3张图片

首先,用户应用(StudentSimulatorApp)要通过Actor System这个Akka里最重要的组件来实现具体Actor的创建、引用(通过Actor Ref)及消息发送等逻辑。消息投递过程中最重要的组件则是Message Dispatcher,它首先把收到的消息放入队列中,然后驱动派发线程去执行每个Actor的收件动作,收件动作就是把每个Actor自己的消息从队列中转移到自己的MailBox中,最后回调Actor的消息处理接口以完成消息的处理逻辑。如下所示为更详细的Akka运作原理图。

Akka简介_第4张图片

 

 

 

你可能感兴趣的:(java,python,c++,golang)