【问题标题】:synchronisation on a block of code using akka使用akka同步代码块
【发布时间】:2013-08-19 18:00:38
【问题描述】:

我想在我的应用程序中使用 akka 进行多处理。 因此,每个参与者执行相同的代码块,结果将由侦听器聚合。 所以,我的问题是在这种情况下会有任何同步问题。如果不是,akka 演员如何在内部处理它。

【问题讨论】:

    标签: multithreading multiprocessing akka actor synchronisation


    【解决方案1】:

    默认情况下不应该有任何同步问题 - 如果您严格遵守参与者方法。这意味着参与者应该只使用包含不可变对象的消息进行通信——并且您永远不应该将参与者的内部状态直接暴露给外部世界。仅通过对收到的消息做出反应来使内部状态可变/可读。

    每个参与者都在自己的 ExecutionContext 中执行。这意味着每个参与者都有自己的私有状态。 Akka Actor 的设计方式是,从“外部世界”访问这个内部状态基本上是不可能的(或者变得非常困难),因为在创建一个新的 Actor 之后,你只有一个对 Actor 的中间引用(一个 ActorRef 实例),不是对内存中实际 Actor 实例的引用。 Akka 开发人员的意图是这样做:开发人员很难获得实际引用并直接访问其属性 - 这会破坏 Actor 方法。

    另一方面,如果您将一个共享的可变对象传递给一个参与者,您将遇到锁和同步的所有麻烦,例如使用线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多