通过演员选择向所有孩子转发消息比迭代子ActorRef更有效吗?

时间:2015-01-28 09:48:39

标签: java akka

我有一个场景,当演员收到特定的消息时,它必须将消息转发给当时存在的所有孩子。

我认为我有2种方法可以解决这个问题。

getContext().actorSelection("*").forward(message, getContext());

getContext().getChildren().forEach(child -> child.forward(message, getContext()));

如果不完全理解演员选择的内部实现,很难知道哪个会更好。我打算用我期望要求的那种规模来执行一些基准测试,但是我希望有经验的用户可以对此有所了解。

由于

1 个答案:

答案 0 :(得分:1)

我没有对它进行基准测试,但我正在寻找两种选择的实现。两者在性能方面实际上应该非常相似,因为它们最终会使用可迭代的参与者参考。

另一方面,你可以check表示字符串" *"被转换为一个表达式,一个actorSelection中的forward将只与该actor的子节点匹配,然后将消息转发给每个匹配的子节点。

matchingChildren.foreach(_.tell(sel.msg, sender))

并在需要时以递归方式执行此操作(例如在" * / *"中)。

因此我建议使用getChildren来避免解析字符串(" *")的过载,将其翻译成正则表达式,并过滤匹配的子项。