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

Iva*_*lin 6 asynchronous scala akka

据说:

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

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

Kon*_*ski 14

这样我们就可以保证内部的线程安全Actor.

因为actor在任何给定时间只会处理一条消息,所以我们可以保证访问actor的本地状态是安全的,即使Actor本身可能正在切换它正在执行的Threads.Akka保证处理消息时写入的状态在处理后M1对Actor是可见的M2,即使它现在可能在不同的线程上运行(通常保证这种安全性需要付出巨大代价,Akka会为您处理).

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

  • 演员不依赖于特定的线程(也就是说,除非你特别想要).它们通常在fork-join线程池上运行,该线程池将actor的receive执行分配给它的线程.Akka中的默认线程池AFAIK根据计算机中的物理内核数设置线程数. (3认同)