找不到这方面的任何信息。我有一个基于 Akka/Spray 的服务并且一直在使用 ExecutionContext.global
如果我想用 std scala Future 编写一些异步代码。在基于 akka 的应用程序中使用调度程序而不是导入全局调度程序有什么好处吗?以及混合是否有任何缺点(某些部分使用 akka 的调度程序,而其他部分使用全局的)?
最佳答案
不要使用 Akka 默认 Dispatcher 来执行 Future-s 中的阻塞调用 - 在这种情况下,您可以让所有坐在默认 Dispatcher 上的 Actor 完全挂起,以防默认 Dispatcher 的所有线程都被此类 Future 中的阻塞调用阻塞-s。
为不同的 Actor 类型使用不同的 Dispatcher-s(尤其是对于执行阻塞调用的 Future-s)被称为 Bulkhead 模式。
ExecutionContext.global 是一个 ForkJoinPool(默认情况下),它使用 scala.concurrent.context.minThreads/maxThreads/numThreads 设置来配置线程数。因此,恕我直言,您可以将它用于 Future-s 执行,而不是任何其他带有 fork-join-executor 的 Akka Dispatcher。
但我建议使用单独的 Akka Dispatcher 进行隔板,以便将所有 Dispatcher 配置在一个地方(在 Akka 配置中)。
关于scala - 使用 akka dispatcher 与 scala global 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278554/