Akka.net演员选择或参考

时间:2017-03-30 13:00:57

标签: akka.net akka.net-cluster

在Akka.net中更有效率,与演员选择交谈或与消息中传递的IActorRef进行交互?

2 个答案:

答案 0 :(得分:0)

最佳答案是根据您的情况对其进行基准测试,因为这可能取决于多种条件(如本地/远程通信)。当我们谈论同一过程中的沟通时,IActorRef应该总是更快。在远程通信中,差异可能更小,但仍然支持IActorRef

话虽如此,重要的是要区分两者:

  • 当基础演员停止时(不要将停止与重启混淆),其IActorRef不再有效。如果稍后会创建它,则旧的IActorRef无需指向它。这是为什么你可以Context.Watch(actorRef)在你的演员去世时得到通知的原因之一。
  • 演员选择不直接指向演员的邮箱,因此通常它更慢。当您尝试通过它发送消息时,将解析实际收件人的邮箱。它不会受到失效问题,但也无法观看。它也可能指向多个actor(使用通配符),因此您的消息可能会传递给actor层次结构中的多个actor。

答案 1 :(得分:0)

我想也许你会以错误的方式来到这里。我不确定哪个更有效率'在表现方面。 (虽然@Horusiath对两者之间的差异提供了很好的指导)

问题在于使用ActorSelection本身就是一种反模式,并且通常建议您使用IActorRefs。请参阅此博客上的第3点:Petabridge: The Top 7 Mistakes Newbies Make with Akka.NET

总之; 使用Actor Refs时,actor的位置是透明的。您尝试与之交互的角色可能位于群集中的任何位置,使用IActorRef时无关紧要。

话虽如此,当ActorSelection可能有用时,他们也有一个不错的小博客...... Petabridge: When Should I Use Actor Selection?

如果您正在权衡代码中使用的内容,我建议您仔细阅读这两个链接。希望这有帮助!