15.1 Akka介绍

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

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

      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才能发送消息

  

    

最新文章

  1. 关于CSV文件 Excel打开乱码问题的解决方案
  2. js 时间构造函数
  3. mongoDB研究笔记:复制集故障转移机制
  4. Yii2 主从 数据库
  5. hdu 4005 双联通 2011大连赛区网络赛E *****
  6. Slim + Twig 构建PHP Web应用程序
  7. Visual Studio 2015 和 Apache Cordova
  8. PHP实现无级递归分类(ThinkPHP框架)
  9. .NET4.5可以给所有线程设置默认的Culture了
  10. CF Codeforces Round #231 (Div. 2)
  11. hbase单机安装
  12. 一键强制修改任意Mysql数据库的密码,修改任意环境Mysql数据库。
  13. 经典dp 编辑距离
  14. nginx优化缓冲缓存
  15. poj 2594 Treasure Exploration(最小路径覆盖,可重点)
  16. (删)Java线程同步实现一:synchronzied和wait()/notify()
  17. Linux查看磁盘剩余空间
  18. JS事件练习题
  19. python里的input
  20. Linux下MySQL的简单操作

热门文章

  1. 【软工实践】Alpha冲刺(2/6)
  2. 深度学习面试题09:一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)
  3. Java实现简单RPC框架(转)
  4. storcli64和smartctl定位硬盘的故障信息
  5. Tosca user space 这是自己的空间,可以create module ,test case 等一大堆模块,五脏俱全
  6. vscode 常用设置与插件推荐
  7. Flutter Wrap 组件实现流布局
  8. php报错syntax error, unexpected T_GOTO, expecting T_STRING,报错文件与行数指向以下代码,是什么原因?
  9. no match for call to ‘(std::__cxx11::string {aka std::__cxx11::basic_string
  10. ES6深入浅出-9 Promise-3.Promise的细节