1.Akka介绍
Akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时,你可以 理解成 Akka 是编写并发程序的框架。
Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口。
Akka主要解决的问题是:可以轻松的写出高效稳定的并发程序,程序员不再过多的考虑线程、 锁和资源竞争等细节。
2.Akka 中 Actor 模型
Akka 处理并发的方法基于 Actor 模型。在基于 Actor 的系统里,所有的事物都是 Actor,就好像在面向对象设计里面所有的事物都是对象一样。但是有一个重要区别,那就是 Actor 模型是作为一个并发模型设计和架构的,而面向对象模式则不是。Actor 与 Actor 之间只能通过消息通信。
3.Akaka的特点
第一:它是对并发模型进行了更高的抽象;
第二:它是异步、非阻塞、高性能的事件驱动编程模型;
第三:它是轻量级事件处理(1GB 内存可容纳百万级别个 Actor);
4.为什么 Actor 模型是一种处理并发问题的解决方案?
处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保持共享数据正确性这个问题呢?无非是我们的程序是多线程的,多个线程对同一个数据进行修改,若不加同步条件,势必会造成数据污染。那么我们是不是可以转换一下思维,用单线程去处理相应的请求,但是又有人会问了,若是用单线程处理,那系统的性能又如何保证。Actor 模型的出现解决了这个问题,简化并发编程,提升程序性能。
5.AKKA处理并发的方法基于 Actor 模型(如图)
说明:
-
Akka 处理并发的方法基于 Actor 模型。
-
在基于 Actor 的系统里,所有的事物都是 Actor,就好像在面向对象设计里面所有的事物都是 对象一样。
-
Actor 模型是作为一个并发模型设计和架构的。Actor 与 Actor 之间只能通过消息通信,如图的信封。
-
Actor 与 Actor 之间只能用消息进行通信,当一个 Actor 给另外一个 Actor 发消息,消息是有顺序的(消息队列),只需要将消息投寄的相应的邮箱即可。
-
怎么处理消息是由接收消息的 Actor 决定的,发送消息 Actor 可以等待回复,也可以异步处理。
-
ActorSystem 的职责是负责创建并管理其创建的 Actor, ActorSystem 是单例的(可以 ActorSystem 是一个工厂,专门创建 Actor),一个 JVM 进程中有一个即可,而 Acotr 是可以有多个的。
-
Actor模型是对并发模型进行了更高的抽象。
-
Actor 模型是异步、非阻塞、高性能的事件驱动编程模型。
-
Actor 模型是轻量级事件处理(1GB 内存可容纳百万级别个 Actor),因此处理大并发性能高。
6.Actor 模型工作机制说明
6.1 说明 Actor 模型的工作机制(对应上图)
-
ActorySystem创建Actor。
-
ActorRef:可以理解成是Actor的代理或者引用。消息是通过ActorRef来发送,而不能通过Actor 发送消息,通过哪个 ActorRef 发消息,就表示把该消息发给哪个 Actor。
-
消息发送到 Dispatcher Message (消息分发器),它得到消息后,会将消息进行分发到对应的MailBox。(注: Dispatcher Message 可以理解成是一个线程池, MailBox 可以理解成是消息队列,可以缓 冲多个消息,遵守 FIFO)
-
Actor 可以通过 receive 方法来获取消息,然后进行处理。
6.2 Actor模型的消息机制(对应上图)
-
每一个消息就是一个 Message 对象。Message 继承了 Runable, 因为 Message 就是线程类。
-
从 Actor 模型工作机制看上去很麻烦,但是程序员编程时只需要编写 Actor 就可以了,其它的交给 Actor 模型完成即可。
-
A Actor 要给 B Actor 发送消息,那么 A Actor 要先拿到(也称为持有) B Actor 的 代理对象ActorRef 才能发送消息。