【问题标题】:Benefits from using akka dispatcher vs scala global使用 akka 调度程序与 scala global 的好处
【发布时间】:2014-04-24 19:54:37
【问题描述】:

找不到有关此的任何信息。我有一个基于 Akka/Spray 的服务,如果我想用 std scala Future 编写一些异步代码,我总是使用ExecutionContext.global。在基于 akka 的应用程序中使用调度程序而不是导入全局调度程序有什么好处吗?而且混合有什么缺点吗(有些部分使用akka的dispatcher,而其他部分使用的是全局的)?

【问题讨论】:

  • 斯拉夫党在这里,顺便说一句:-)

标签: scala concurrency akka


【解决方案1】:

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

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

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

但我建议使用单独的 Akka Dispatcher 进行隔板,以便将所有 Dispatcher 配置在一个地方(在 Akka 配置中)。

【讨论】:

  • 其实我对一些不同的东西感兴趣。当我在 Akka Actor 中使用期货时,使用 Scala 全局 ctx 执行期货与导入 context.dispatcher 有什么不同?
  • AFAIK 没有区别(当然如果他们默认是 ForkJoinPool-s 的话)。除非 Futures 可能阻塞 context.dispatcher 中的所有线程(这可能会挂起您的 Actor)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多