Scala学习——actor的使用


原文引用于 http://blog.csdn.net/lsshlsw/article/details/41515125

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。

 

运行结果:

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM