我对Akka框架和并发概念相当新.从Akka docs中,我了解到一次只能处理Actor邮箱中的一条消息.所以单线程一次处理Actor的状态.我怀疑的是,因此将一个Actor状态/数据变量声明为可变 – ‘Var'(仅当’Val’不适合时),在并发的情况下不会导致不一致的Actor状态.
我正在使用
Scala进行开发.在下面的主演员中,工人的详细信息存储在可变变量“工人”中.这会是并发问题吗?
class Master extends PersistentActor with ActorLogging {
...
private var workers = Map[String, WorkerState]()
...
}
最佳答案 我觉得你做的很好.正如你所说,Akka演员的一个基本保证是一个演员将一次处理一条消息,因此不会有不一致的Actor状态.
Akka actors conceptually each have their own light-weight thread,
which is completely shielded from the rest of the system. This means
that instead of having to synchronize access using locks you can just
write your actor code without worrying about concurrency at all.
http://doc.akka.io/docs/akka/snapshot/general/actors.html
另外,使用var而不是val和可变映射是一件好事:)