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

  

    

转载于:https://www.cnblogs.com/zhanghuicheng/p/10884477.html

15. Scala并发编程模型Akka相关推荐

  1. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  2. 并发编程模型Akka

    1)Akka是java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解为Akka是编写并发程序的框架 2)akka是用scala语言写成,同时提供了scala和java的开发接 ...

  3. Scala并发编程(二)之 Akka

    Scala并发编程之 Akka 概述 Akka通信过程 Actor Path 入门案例 定时任务案例 两个进程之间的通信案例 简易版 Spark通信框架实现案例 概述 Akka是使用 Scala开发的 ...

  4. java akka 教程_Akka与并发编程模型

    Akka是一种并发编程模型的框架,其官网为http://akka.io.提供Java版本和Scala版本的API. 从学习或者使用的角度来说,我们首先要说明的是,Akka的并发编程模型(流水线模式)与 ...

  5. Scala入门到精通——第二十六节 Scala并发编程基础

    本节主要内容 Scala并发编程简介 Scala Actor并发编程模型 react模型 Actor的几种状态 Actor深入使用解析 1. Scala并发编程简介 2003 年,Herb Sutte ...

  6. 四种并发编程模型简介

    概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" •       并发 :同一时间 对待 多件事情 (逻辑层面) •       并 ...

  7. [ ECUG 专题回顾]《再谈 CERL:详论 GO 与 ERLANG 的并发编程模型差异》-许式伟(七牛云存储 CEO)...

    许式伟:我们开始,先介绍一下ECUG,从07年开始,最早在珠三角珠海广州深圳,在珠三角兴起,最早是Erlang的社区.大概到10年的时候更名为实时效云计算的群组,最早的时候也不局限于Erlang,而是 ...

  8. 【专家坐堂】四种并发编程模型简介

    本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" •       并发 :同一时间 对待 多件事情 (逻辑层面) ...

  9. Akka框架——第一节:并发编程简介

    本节主要内容: 1. 重要概念 2. Actor模型 3. Akka架构简介 多核处理器的出现使并发编程(Concurrent Programming)成为开发人员必备的一项技能,许多现代编程语言都致 ...

最新文章

  1. 烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?
  2. LeetCode - 25. Reverse Nodes in k-Group
  3. 小妲己智能机器人要连接wifi吗_“能扫能拖,聪明能干”,360扫地机器人S7一周体验分享...
  4. ant build里如何指定classpath
  5. atom对比 vscode_几款前端IDE工具:Sublime、Atom、VSCode比较
  6. 智能算法之免疫算法求解TSP问题
  7. java单线程爬虫使用Jsoup爬取bt磁力链接
  8. 动态SQL execute immediate
  9. 基金会总线协议分析(FF协议)
  10. 大专计算机应用技术毕业生登记表自我鉴定,大专毕业生登记表的自我鉴定(精选5篇)...
  11. 大案牍术——我们或是只是一串数字
  12. python教孩子学编程,教孩子学编程(Python语言版)
  13. 微软官方外挂,让你的win10更加好用
  14. cdrx8如何批量导出jpg_coreldraw2019中把所有页面批量导出jpg图的解决方法
  15. 塔科夫为什么远程服务器返回错误,逃离塔科夫登陆错误解决教程
  16. 总投资2185.38亿元,澜沧江水电站传来好消息
  17. 【送书】就业大崩溃,你是否正在从事20年内大概率被淘汰的职业?
  18. 合肥达内培训php,合肥达内PHP培训php7扩展声明与获取ini配置
  19. Java面向对象练习题之西游记人物
  20. 海外大火,国内鲜有耳闻,多功能料理机是否存在“水土不服”的问题?

热门文章

  1. Mac忘记root密码(Mac OS Sierra忘记root密码如何重置)
  2. 漫步最优化四十四——基本拟牛顿法
  3. leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别
  4. 【差分隐私的Advanced composition到底是什么?】差分隐私系统学习记录(四)
  5. C++/C--字符串分割函数 --strtok()
  6. Arm开发板内核驱动模块--Helloworld及Makefile
  7. Spring表达式语言使用
  8. 求C n m(从n个数中选m个数,有多少种组合?问题)暴力—递归——回归数学公式,三种方法,层层优化!
  9. MATLAB 在图像处理和机器视觉的应用举例01 - 官网培训视频笔记(下)分类/灰度共生矩阵/纹理分类学习
  10. Linux vector最大存储数量,C++ STL vector容量(capacity)和大小(size)的区别