gpt4 book ai didi

java - 为什么 akka 需要不可变消息

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:19 25 4
gpt4 key购买 nike

或者换句话说:是否正确使用了可变消息?

我面临的用例是我想处理基本上是类型的对象

Map<String,List<String>>

actor 执行的典型处理是读取或写入 map 的某些字段。一个浓缩的例子是(省略 null-tests 等)

  map.get("somekey").add("new value");

我的预感是,通过使用各自的集合类型,在 Scala 中保持此不可变是微不足道的。在 Java 中,它需要一些额外的类库。

但是:阅读 Akka 文档,我发现 sending a message introduces a happens-before relation在发送者的最后一次访问和接收者的第一次访问之间。因此,如果 map 不是不可变的,那么发送方应该可以看到所有数据。

假设我可以确保发送方在 map 发送后不会再触及它,是否还有关于此 map 的线程数据访问的任何其他问题?

最佳答案

OP 对 happens-before 规则的解释是正确的:“actor 发送规则”意味着将 M 发送给 actor A happens-before A 处理 M(这就是“相同”所指的)。

回答主要问题:只要在任何给定时间点最多只有一个参与者可以“拥有”可变 map ,这就可行,并且根据具体情况,这可能是最有效的解决方案问题。不过,保证单一所有权需要一些纪律,这会通过维护成本抵消运行时优势。

虽然最初的问题遗漏了传输 Map 的实际工具,但我想强调 Randall 的观点,即参与者之间的消息永远不应该是 JDK 类型,因为它们缺乏语义。在这种情况下,Map 应该包含在一个明确命名的自定义消息类型中。

关于java - 为什么 akka 需要不可变消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com