scala中Actor特性,对象之间通信使用
来源:互联网 发布:精准医疗信息数据库 编辑:程序博客网 时间:2024/06/05 15:19
Actor
为什么需要Actor?
Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式。例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信息。这么做看似不如直接方法调用来的直接,但是由于大量的消息可以同时执行。同样,消息让Actor之间解耦,消息发出之后执行成功还是失败,需要耗费多少时间,只要没有消息传递回来,这一切都和发送方无关。Actor模型的消息传递形式简化了并行程序的开发,使开发人员无需在共享内存(确切地说,其实是共享“写”)环境中与“锁”、“互斥体”等常用基础元素打交道。
Actor提供了并发程序中与传统的基于锁的结构不同的另一种选择。通过尽可能避免锁和共享状态,Actor使得我们能够更容易地设计出正确,没有死锁或争用状况的程序。
Tip1:
Actor的本质即万物皆Actor, Actor之间只有发送消息这一种通信方式。
Tip2:
避免使用同步调用(!?),它们会阻塞,很有可能引发死锁。
Tip3:
不同的actor可以通过React共享线程。
Tip4:
不同的actor之间不应该共享状态,不要直接调用actor的方法,而是通过消息通信。
1 创建和启动Actor
Tip1:
Actor的消息队列会串行化消息。Actor运行在单个线程中,它会先接受一条消息,然后接收下一条。不用在Actor代码中担心争用状况。
Tip2:
Actor的act方法在start方法被调用时开始执行。如果act方法返回或是由于异常被终止或是actor调用exit方法,都会导致actor终止执行。
Tip3:
如果在receive方法被调用时并没有消息,该调用会阻塞,直到有消息到达。如果发来的消息无法匹配,同样会阻塞,等待下一个消息。
Tip4:
接受消息除了receive和react两种方式还receiveWithin(5000),reactWithin(5000),其中的参数表示在5秒内没收到信息将返回一个Actor.TIMEOUT对象。
结果:
2 与其他Actor通信
Tip1:
Actor可以构造成带有指向一个或更多actor的引用。
Tip2:
Actor可以接受带有指向另一个actor的引用的消息,在请求中提供一个actor引用非常常见。
Tip3:
Actor可以返回消息给发送方。Receive会把sender字段设为当前消息的发送方。
3 共享线程的Actor
Tip1:
尽可能的使用react,使用react的actor可以共享线程。只要消息处理器的工作是执行某个任务,然后退出,你就可以使用react。
Tip2:
每次对react的调用都会抛出异常,进行清栈。
4 同步消息
Tip1:
actor可以发送一个消息并等待回复,用!?操作符即可。
Tip2:
同步消息容易引发死锁,最好避免使用。
5 FUTURE
Tip1:
!!操作符发送的消息会返回一个对象(future),该对象可以稍后处理,也可以发送给其他Actor。
Tip2:
如果立即就想从future接受返回的结果进行处理,就相当于是同步消息(!?)。
6 将多个Actor链接起来
Tip1:
如果你将两个Actor链接在一起,双方都会在另一个终止执行的时候得到通知。
Eg. 监管actor在数个工作actor中分发工作任务,当某个actor挂掉的时候,监管actor应该知道,重新指派工作或是重启该actor。相应的,如果监管actor挂掉,actor也应该知道,以便停止工作。
Tip2:
当一个actor终止的时候,仍保留其内部状态和邮箱(消息队列)。如果要得到这些消息,可以调用该终止actor的restart方法。另外你还可以重新建立链接,因为一个actor终止时其链接会被移除。
Tip3:
当前actor连接到的actor中有一个以非正常(normal)原因退出。当前actor也会终止,退出原因和链接到的那个actor退出原因相同。如果你设置trapExit为true。修改后actor会接收到一个Exit类型的消息,该消息包含了退出原因和正在退出的actor。
运行结果:
- scala中Actor特性,对象之间通信使用
- Scala Actor通信
- Scala actor的使用
- scala中akka actor例子
- scala actor
- scala Actor
- Scala actor
- Spark基础-Scala中actor的操作
- Scala使用Actor进行并发编程
- Scala中Lists对象的使用
- 第17节:scala中Actor并发编程
- 使用scala的actor模型实现并发的例子
- Scala:简单使用Actor的消息发送与接收求和
- 使用scala的Actor模拟计算多文件WordCount
- Scala的线程actor
- scala 简要: Actor
- scala Actor 初探
- Scala Actor并发编程
- Java反射机制详解
- 增量备份+增量备份的实现方式+差异备份案例+累积备份案例
- [笔记]: 并查集
- input子系统浅析
- 实时监测网络状态
- scala中Actor特性,对象之间通信使用
- 1954: 吃面包(枚举,技巧)
- Android中的USB中的UsbAccessory和UsbDevice的区别
- 【译U3D】官方坦克3D游戏制作1-物体与场景搭建
- pat C4-GPLT真题及训练集 L1-039
- windows下mysql每天定时备份数据库几种方法
- 信息图:比特币区块链的工作原理
- CSS3 filter(滤镜) 属性
- httpURlConnection与Socket