Scala akka:专用调度员还是未来?

Scala akka:专用调度员还是未来?,scala,akka,dispatcher,future,Scala,Akka,Dispatcher,Future,我有一群演员(Akka 2)需要与后台系统同步通信 让参与者使用一个单独的专用调度程序并像这样同步执行处理,有什么不对吗 def receive = { case Foo(foo) => sender ! getFooSynchronously(foo) case Bar(bar) => sender ! getBarSynchronously(bar) } 或者我应该像下面这样使用期货 def receive = { case Foo(foo) => Futur

我有一群演员(Akka 2)需要与后台系统同步通信

让参与者使用一个单独的专用调度程序并像这样同步执行处理,有什么不对吗

def receive = {
  case Foo(foo) => sender ! getFooSynchronously(foo)
  case Bar(bar) => sender ! getBarSynchronously(bar)
}
或者我应该像下面这样使用期货

def receive = {
  case Foo(foo) => Future { getFooSynchronously(foo) } pipeTo sender
  case Bar(bar) => Future { getBarSynchronously(bar) } pipeTo sender
}

如果我没有弄错的话,使用Futures可以让参与者并行地请求Foo和Bar并加入结果,这在同步方法中是不可能的。考虑到我不需要并行处理:使用专用调度程序和避免创建未来是否更有效?

如果最终需要比默认调度程序最大池大小更多的并发
getSynchronously()
操作,则无论哪种方式都需要专用调度程序


但对于你的问题,我同意@rob starling,两者都很好,都有各自的用途。

只要你知道前者会阻止你的
receive
方法,并且你的参与者在同步调用完成之前不会处理更多的消息,这可能是一个非常有效的决定。我同意使用一个单独的调度器来“防火墙”这些同步/阻塞参与者是一个好主意。您希望避免在actor系统的主调度器中发生阻塞行为,但是当您有必须阻塞的actor时,这种方法是可以的。