gpt4 book ai didi

scala - Akka actor 转发消息并继续

转载 作者:行者123 更新时间:2023-12-03 03:35:55 25 4
gpt4 key购买 nike

我有一个 Actor ,它从另一个 Actor 那里获取结果并对其进行一些检查。

class Actor1(actor2:Actor2) {

def receive = {
case SomeMessage =>
val r = actor2 ? NewMessage()
r.map(someTransform).pipeTo(sender)
}
}

现在,如果我向 Actor1 提出请求,我们现在会生成 2 个 future,这看起来效率不太高。有没有办法提供某种延续的转发,或者我可以在这里使用的其他方法?

    case SomeMessage => actor2.forward(NewMessage, someTransform)

最佳答案

Futures 在 ExecutionContext 中执行,就像线程池一样。创建一个新的 future 并不像创建一个新线程那么昂贵,但它有其成本。使用 future 的最佳方法是根据需要创建尽可能多的内容,然后以这样的方式进行组合:如果必要的资源可用,则可以并行计算可并行计算的内容。这样您就可以充分利用您的机器。

您提到 akka 文档不鼓励过度使用 future。我不知道你在哪里读到这篇文章,但我认为它的意思是更喜欢改变 future 而不是创造自己的 future 。这正是您使用 map 所做的事情。此外,这可能意味着,如果您创建一个不需要的 future ,您就会增加不必要的开销。

在您的情况下,您有一个返回 future 的调用,您需要应用一些转换并返回结果。使用 map 是必经之路。

关于scala - Akka actor 转发消息并继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138258/

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