繁体   English   中英

Akka演员前进消息与继续

[英]Akka actor forward message with continuation

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

class Actor1(actor2:Actor2) {

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

现在,如果我问一下Actor1,我们现在已经生成了2个期货,这看起来并不过分。 有没有办法提供某种延续的方法,或者我可以在这里使用的其他方法?

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

期货在ExecutionContext中执行,它们就像线程池一样。 创建新的未来并不像创建新线程那么昂贵,但它有成本。 使用期货的最佳方法是尽可能多地创建并以一种方式组合,以便在必要的资源可用时并行计算并行计算的事物。 这样您就可以充分利用您的机器。

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

在您的情况下,您有一个返回未来的调用,您需要应用sometransform并返回结果。 使用地图是要走的路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM