分享跨越akka演员儿童的可变地图

时间:2015-02-19 16:57:26

标签: scala

我有一个庞大的Mutable Map对象占用了很多内存,父母的所有孩子都需要访问或修改同一Map的值。

我正在考虑在子项创建期间将可变映射作为构造函数参数传递给所有可以访问或修改映射的子项。

我只是想确认SCALA实际上是否传递了对象引用,因此不会再次复制Mutable Map,而是所有的子节点都将修改相同的Map实例?

2 个答案:

答案 0 :(得分:4)

这是一个坏主意。 Akka团队不推荐任何类型的shared mutable state

Akka解决问题的方法是让你的地图不可变,并在不可变的消息中传递给你的孩子。如果您确信映射必须是可变的,那么让一个actor管理映射并让其他actor向其发送消息以检索/更新值。一个演员中的可变状态没有任何问题。

答案 1 :(得分:0)

  

我有一个巨大的Mutable Map对象占用了很多内存   父母的所有孩子都需要访问或修改值   相同的地图

与其他并发机制相比,这正是Akka所关注的。在Actor中封装可变状态并向Actor发送消息以改变状态是正确和推荐的方法。

因此,您需要将ActorRef传递给需要修改地图的任何演员。很酷的是,其他actor可以在不同的JVM上,它仍然可以工作。

这也可以解决您对Map的大量内存占用的担忧。