我想在我的应用程序中使用 akka 进行多处理。因此,每个参与者执行相同的代码块,结果将由侦听器聚合。所以,我的问题是在这种情况下会有任何同步问题。如果不是,它是如何由 akka 演员在内部处理的。
问问题
97 次
1 回答
0
默认情况下不应该有任何同步问题 -如果您严格遵守参与者方法。这意味着参与者应该只使用包含不可变对象的消息进行通信——并且您永远不应该将参与者的内部状态直接暴露给外部世界。仅通过对收到的消息做出反应来使内部状态可变/可读。
每个参与者都在自己的 ExecutionContext 中执行。这意味着每个参与者都有自己的私有状态。Akka Actor 的设计方式是,从“外部世界”访问这个内部状态基本上是不可能的(或者变得非常困难),因为在创建一个新的 Actor 之后,你只有一个对 Actor 的中间引用(一个 ActorRef 实例),不是对内存中实际 Actor 实例的引用。Akka 开发人员的意图是这样做:开发人员很难获取实际引用并直接访问其属性 - 这会破坏 Actor 方法。
另一方面,如果您将共享的可变对象传递给参与者,那么您将遇到锁和同步的所有麻烦,例如使用线程。
于 2013-08-19T19:35:42.563 回答