或者换句话说:可变消息是否有正确的用途?
我面临的用例是我想要处理基本上属于类型的对象
Map<String,List<String>>
参与者要做的典型处理是读取或写入地图的某些字段。一个简洁的例子是(省略null
-测试等)
map.get("somekey").add("new value");
我的预感是,通过使用相应的集合类型,在 Scala 中保持这一不可变性将是微不足道的。在 Java 中,需要一些额外的类库。
但是:阅读 Akka 文档,我发现发送消息引入了发生之前关系发送者的最后一次访问和接收者的第一次访问之间。所以如果map
不是一成不变的,尽管如此,发送者应该看到所有数据。
假设我可以确保发件人永远不会碰map
再次发送后,关于对此映射的线程数据访问是否还有其他问题?
OP对happens-before规则的解释是正确的:“actor发送规则”意味着将M发送给actor A发生在A处理M之前(这就是“相同”所指的)。
回答主要问题:只要在任何给定时间点最多只有一个参与者可以“拥有”可变映射,这就会起作用,并且根据具体情况,这很可能是解决问题的最有效的解决方案。不过,保证单一所有权需要一些纪律,这会通过维护成本抵消运行时优势。
尽管最初的问题忽略了运输车辆的实际车辆Map
我想强调 Randall 的观点,即参与者之间的消息永远不应该是 JDK 类型,因为它们缺乏语义意义。这Map
在这种情况下应该包含在明确命名的自定义消息类型中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)