0

在 Akka.net 中,与参与者选择对话或与消息中传递的 IActorRef 交互更有效的是什么?

4

2 回答 2

1

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

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

  • 当底层参与者停止时(不要将停止与重启混淆)它IActorRef不再有效。如果它将在一段时间后创建,则您的 oldIActorRef不必指向它。Context.Watch(actorRef)这就是为什么当你的演员去世时你可能会收到通知的原因之一。
  • 演员选择不直接指向演员的邮箱,因此通常比较慢。当您尝试通过它发送消息时,实际收件人的邮箱被解析。它不会出现失效问题,但也无法观看。它也可能指向多个参与者(使用通配符),因此您的消息可能会传递给参与者层次结构中的多个参与者。
于 2017-03-30T17:43:24.930 回答
1

我想也许你是以错误的方式来解决这个问题的。我不确定哪个在性能方面“更有效”。(尽管@Horsiath 对两者之间的差异提供了一些很好的指导)

问题是使用 ActorSelection 本身就是一种反模式,它通常建议您使用 IActorRefs。请参阅此博客上的第 3 点:Petabridge:新手使用 Akka.NET 犯的 7 大错误

简而言之; 当使用 Actor Refs 时,actor 的位置是透明的。您尝试与之交互的参与者可以在集群中的任何位置,并且在使用 IActorRef 时无关紧要。

话虽如此,他们也有一个关于 ActorSelection 什么时候有用的小博客…… Petabridge:我什么时候应该使用 Actor Selection?

如果您正在权衡在代码中使用哪个链接,我建议您通读这两个链接。希望这可以帮助!

于 2017-04-20T14:37:18.737 回答