gpt4 book ai didi

c# - akka.net Tell (object) 与 Tell (object, IActorRef)

转载 作者:行者123 更新时间:2023-12-03 23:34:15 30 4
gpt4 key购买 nike

有什么区别?据我了解,Tell (object, IActorRef) 发送原始发件人。但为什么不只使用 Forward 方法呢?

谢谢

最佳答案

您可以将actorRef.Tell(msg) 视为actorRef.Tell(msg, Context.Self) 的快捷方式,而actorRef.Forward( msg) 保留原始消息发件人。这也意味着,您需要在后台有一个事件的参与者上下文来定义任何有意义的发件人。

使用 Tell(object, IActorRef) 允许您将 Sender 设置为您喜欢的任何 actor ref,包括像模拟另一个 actor 或 ActorRefs.NoSender 这样的东西,这可能用于减少通过线路发送的有效载荷的大小,因为消息发送者不会被序列化。

在某些远程场景中,如果您不希望向 Sender 发送答复,请使用 actorRef.Tell(msg, ActorRefs.NoSender) 可能会带来不错的性能优势。

为什么? IActorRef 被序列化为 URI 字符串(示例:akka.tcp://system-name@localhost:9001/user/parent/child)。当您发送小消息时,即股票价格变动或游戏角色位置变化,这可能意味着您的有效载荷中最昂贵的部分实际上是发件人。

反序列化 IActorRef 也需要一些额外的时间,因为 actor 提供者需要为其解析正确的消息传输。

出于这些原因,如果您不需要 Sender,使用 ActorRefs.NoSender 可能是一个有效的选择。

关于c# - akka.net Tell (object) 与 Tell (object, IActorRef),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718515/

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