15. Scala并发编程模型Akka

15.1 Akka介绍

      1) Akka是Java虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时,能够理解成Akka是编写并发程序的框架程序员

      2) Akka用Scala语言写成,同时提供了Scala和Java的开发接口ajax

      3) Akka主要解决的问题是:能够轻松的写出高效稳定的并发程序,程序员再也不过多的考虑线程、锁和资源竞争等细节编程

15.2 Actor模型用于解决什么问题 

      1) 处理并发问题关键是要保证共享数据的一致性和正确性,由于程序是多线程时,多个线程对同一个数据进行修改,若不加同步条件,势必会形成数据污染。可是当咱们对关键代码加入同步条件synchronized后,实际上大并发就会阻塞在这段代码,对程序效率有很大影响多线程

      2) 如果用单线程处理,不会有数据一致性的问题,可是系统的性能又不能保证架构

      3) Actor模型的出现解决了这个问题,简化并发编程,提高程序性能。能够理解成Actor模型是一种处理并发问题的解决方案并发

15.3 Akka中的Actor模型

  15.3.1 Actor模型及其说明 

  

      1) Akka处理并发的方法基于Actor模型(示意图)框架

      2) 在基于Actor的系统里,全部的事物都是Actor,就好像在面向对象设计里面全部的事物都是对象同样异步

      3) Actor模型是做为一个并发模型设计和架构的。Actor与Actor之间只能经过消息通讯,如图的信封分布式

      4) Actor与Actor之间只能用消息进行通讯,当一个Actor给另外一个Actor发消息,消息是有顺序的(消息队列),只须要将消息投寄到相应的邮箱便可高并发

      5) 怎么处理消息是由接收消息的Actor决定的,发送消息Actor能够等待回复,也能够异步处理[ajax]

      6) ActorSystem的职责是负责建立并管理其建立的Actor,ActorSystem是单例的(ActorSystem是一个工厂,专门建立Actor),一个JVM进程中有一个便可,而 Acotr是能够有多个的

      7) Actor模型是对并发模型进行了更高的抽象 

      8) Actor模型是异步、非阻塞、高性能的事件驱动编程模型 

      9) Actor模型是轻量级事件处理(1GB 内存可容纳百万级别个Actor),所以处理大并发性能高 

15.4 Actor模型工做机制说明

      -说明了Actor模型的工做机制(对应上图)

        1) ActorySystem建立Actor

        2) ActorRef:能够理解成是Actor的代理或者引用。消息是经过ActorRef来发送,而不能经过Actor发送消息,经过哪一个ActorRef发消息,就表示把该消息发给哪一个Actor

        3) 消息发送到Dispatcher Message(消息分发器),它获得消息后,会将消息进行分发到对应的MailBox。(注:Dispatcher Message能够理解成是一个线程池,MailBox能够理解成是消息队列,能够缓冲多个消息,遵照FIFO)

        4) Actor能够经过receive方法来获取消息,而后进行处理

      -Actor模型的消息机制(对应上图)

        1) 每个消息就是一个Message对象,Message继承了Runable,由于Message就是线程类

        2) 从Actor模型工做机制看上去很麻烦,可是程序员编程时只须要编写Actor就能够了,其它的交给Actor模型完成便可

        3) A Actor要给B Actor发送消息,那么A Actor要先拿到(也称为持有)B Actor的代理对象ActorRef才能发送消息

相关文章
相关标签/搜索