使用akka对代码块进行同步

时间:2013-08-19 18:00:39

标签: multithreading multiprocessing akka actor synchronisation

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

1 个答案:

答案 0 :(得分:0)

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

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

如果 - 另一方面 - 你将一个共享的可变对象传递给一个actor,你将拥有锁和同步的所有麻烦,就像你使用Threads一样。