Akka:在Actor中一次处理一条消息的原因是什么?

时间:2014-12-15 12:46:38

标签: scala asynchronous akka

据说:

  

Akka确保actor的每个实例都在自己的轻量级线程中运行,并且一次处理一个消息。

您能否解释在演员中一次处理一条消息的原因是什么?

1 个答案:

答案 0 :(得分:13)

这样我们可以保证Actor内的线程安全。

因为演员只会在任何给定时间处理一条消息,所以我们可以保证访问actor的本地状态是安全的,即使Actor本身可能正在切换它正在执行的线程。 Akka保证处理消息M1时写入的状态在处理M2后对于Actor是可见的,即使它现在可以在不同的线程上运行(通常保证这种安全性来自于巨大的成本,Akka为你处理这个。)

它也源于原始的Actor模型描述,它是一个并发抽象,被描述为只能逐个处理消息并通过执行以下操作之一来响应这些动作的actor:发送其他消息,更改它'行为或创造新的角色。