scala - 使用 akka dispatcher 与 scala global 的好处

标签 scala concurrency akka

找不到这方面的任何信息。我有一个基于 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/

相关文章:

scala - 如何计算 SortedMap/TreeMap 的运行总计

java - 为什么 ForkJoinPool 没有运行所有任务?

java - 从 dl.util.concurrent 迁移到 java.util.concurrent 的概述/教程

sql - 简单的 UPDATE 和 DELETE 语句可以触发 PostgreSQL 中的死锁和回滚吗?

akka - 我如何测试 Akka 成为/不成为转换?

scala - 如何将checkstyle和PMD集成到Play框架的Build.scala文件中

scala - 用 For Comprehension 组合 Futures

c# - Akka.NET 和 MVVM

scala - 如何使用类型参数的Scala边界访问方法

scala - Play 2.4 : Schedule a recurring task at app startup with dependency injection