scala之Akka的Actor模型(上)
来源:互联网 发布:gta5神作 知乎 编辑:程序博客网 时间:2024/04/30 07:56
原文地址:http://my.oschina.net/jingxing05/blog/287213
明确并行和并发
看两张图
并行parallelism
并发concurrency
关键点在于 多个任务之间 有没有 交流和交互的!
交流: 共享内存(Lock 信号量) 消息驱动 交互:竞争
一段顺序的相同代码 同时 多份 运行 并行,并行不悖!!!多条车道
而当把这段顺序的代码再分成几个独立的执行小段,对各个小段可以同时执行,并产生交流时
并发 一条道上 多辆车 可以超车
多线程是并行的,但不一定是并发的,如果没有交互
没有对共享变量的操做,根本无需考虑所谓并发的问题
参考 http://wangcong.org/blog/archives/2054
Actor模型
Actor模型的要点
- 基于Actor的系统中 Actor是最小的抽象单元, 就像object 之于 oop
- 一个Actor封装了状态和行为
- 外界不能进入Actor以获取其状态、字段、执行方法,和Actor的交互只能通过message
- 一个Actor有一个信箱mailbox,将外部发送来的消息msg存到队列中
- Actor的终生就是在等待msg,并依次取出mailbox中的消息进行处理
Actor模型的组织观
- 将Actor系统视为一个公司,从上到下有严格的层级关系,公司中员工是person,也是actor
- 一个Actor仅有一个上级主管 称为 supervisor,就是create这个Actor的 那个Actor
- 一个Actor可能有多个下属小兵,真正干着脏累差活的actor
- 一个Actor可能有多个同级的兄弟部门actor
开发actor系统的关键
- 委托 委托 委托!!! 以做的更多!
- 公司老总不能事无巨细全部承担,他的主要工作就是分配公司工作和监督
- 各部门主管收到任务,要么自己干,要么再细分任务,然后分配到自己的下属手中并监督
- 如果公司还有更多的层级,则继续上面这个主管的龌龊勾当
- 最底层的员工收到细粒度任务,干着自己最擅长的事情
Actor的失效处理
- 人无完人,Actor也不可能100%完成任务
- 如果任务执行失败,一个Actor会挂起自己及其下属,然后发消息告诉其上级主管“我失败了”!
- 上级主管收到下属的“失败”消息时,可以有如下反应:
- 失败就失败,就这样吧,没太大关系:保持当前状态,恢复Actor,继续工作
- 没成功啊,那重新做一遍吧 :重置状态,重启该Actor
- 没机会了,失败了你就滚!解雇下属:关闭 终结 该 Actor
- 这事我也决定不了,我请示我的上级:向上级Actor报告
Akka实现的Actor模型的一些附加特性
- 实例化一个Actor时,返回一个ActorRef,相当于 邮箱地址,并不能通过这个获取Actor的状态信息
- Actor模型是线程的更高层抽象,最终是跑在java的线程中的
- 多个Actor可能共享一个线程,这是由akka保障的
- Actor的信箱有多种实现方式:无限变量信箱 有限信箱 带优先级信箱, 还可以自定义实现
- akka没有让Actor扫描信箱的message
- 一个Actor终结(无论是正常还是非常的)它的信箱中的msg进入akka系统的“死信箱dead letter mailbox”中
0 0
- scala之Akka的Actor模型(上)
- scala之Akka的Actor模型(下)
- Akka之actor模型
- Scala---Akka Actor(三)Actor的持久化
- .NET的Actor模型:Orleans Orleans是微软推出的类似Scala Akka的Actor模型,
- Scala---Akka Actor (一)tutorial-1
- Scala---Akka Actor(一)tutorial-2
- Scala---Akka Actor(二)actor创建以及Ask模式
- 对于akka中,actor模型的理解。
- akka---actor模型
- 【Akka】Actor模型探索
- scala中akka actor例子
- Scala基于Akka的Remote Actor实现的简单RPC
- spark(5)--scala之actor模型
- [akka] Actor的生命周期
- scala akka 修炼之路1(使用actor实现一个job的并发计算和task失败重启)
- Akka(1):Actor
- Akka并发编程——1、Actor模型(一)
- Java 抽象类和接口的区别
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- C# 中设置 Font属性
- centos 查看系统监听的端口
- zookeeper安装使用(linux)
- scala之Akka的Actor模型(上)
- 统一软件开发过程——RUP
- JAVA调用命令行
- Tomcat数据库连接池的配置方法总结
- eclipse中访问不了tomcat首页server Locations变灰无法编辑
- POJ2287-Tian Ji -- The Horse Racing (Java)
- python yield用法
- DB2使用Hibernate拦截器实现脏读(with ur)
- 图像分割--金字塔分割算法