使用akka调度程序和scala全局的好处

时间:2014-04-24 19:54:38

标签: scala concurrency akka

无法找到有关此内容的任何信息。我有一个基于Akka / Spray的服务,如果我想用std scala Future编写一些异步代码,我总是使用ExecutionContext.global。在基于akka的应用程序中使用调度程序而不是导入全局应用程序是否有任何好处?混合也有任何不足(有些部分使用的是akka调度员和其他部分规模的全球)?

1 个答案:

答案 0 :(得分:6)

不要使用Akka默认Dispatcher在Future-s中执行阻塞调用 - 在这种情况下,如果默认Dispatcher的所有线程都被阻止,您可以将所有Actors坐在默认Dispatcher上完全挂起在这样的Future-s中阻止调用。

对不同的Actor类型(尤其是阻塞调用的Future-s)使用不同的Dispatcher-s称为Bulkhead Pattern。

ExecutionContext.global是一个ForkJoinPool(默认情况下),它使用scala.concurrent.context.minThreads / maxThreads / numThreads设置来配置线程数。所以,恕我直言,您可以将它用于Future-s执行,而不是任何其他具有fork-join-executor的Akka Dispatcher。

但我建议使用单独的Akka Dispatcher进行批量处理,以便在一个地方配置所有Dispatchers(在Akka配置中)。