2013-08-19 50 views
0

我想在我的應用程序中使用akka進行多重處理。 因此,相同的代碼塊由每個actor執行,結果將由listener聚合。 所以,我的問題是在這種情況下會有任何同步問題。如果不是,它是如何被內部的阿卡行爲者處理的。使用akka同步代碼塊

回答

0

默認情況下,不應該有任何同步問題 - 如果您嚴格尊重演員的方法。這意味着演員只應該使用包含不可變對象的消息進行交流 - 並且你絕不應該直接暴露演員的內部狀態到外部世界。通過對收到的消息作出反應,使內部狀態可變/可讀。

每個actor都在自己的ExecutionContext中執行。這意味着每個演員都有自己的私人狀態。 Akka演員的設計方式是,從「外部世界」訪問這個內部狀態基本上是不可能的(或者變得非常困難),因爲在創建新的Actor之後,您只有對Actor(ActorRef實例)的中介引用,不是對內存中實際的Actor實例的引用。 Akka開發人員的意圖是這樣做的:開發人員很難獲得實際的引用並直接訪問其屬性 - 這會打破Actor的方法。

如果 - 另一方面,您將一個共享的可變對象傳遞給了一個actor,那麼您將像使用Threads一樣擁有所有的鎖和同步的麻煩。