线程模型和 AKKA
Threading model and AKKA
我在某处听说默认情况下有一个 Actor 系统,这意味着它的 ExecutorService/Dispatcher 正在为 运行 Actor 创建一个非 Deamon 线程池。如果确实如此,那将解释我所经历的一些行为,我可以在 AKKA 的文档中找到它。我的意思是在文档的最新版本中没有任何说明。同时,这也发生了变化。
有些人在主线程中使用了 AwaitTermination,以防止程序不关闭正在 运行ning 的 actor 系统。我见过这样的代码片段。
但后来我意识到它没有用。
仍然对这种行为感到困惑我继续试验期货,但它没有用,我不得不阻止我的主。但是,当在 Actor 中使用时,它会起作用。那是因为未来 运行 宁在守护线程中。
理解这些差异非常重要。
导入时 ExecutionContext.implicit.global :
1 - 当 运行 未来时,执行上下文是 Deamon 或非 Deamon 线程的线程池
2 - 当 运行在 Actor 中建立未来?会发生什么,这与在 actor context.dispatcher 中导入一样吗?在这种情况下,当启动一个 Actorsystem 时,ExecutionContext.implicit.global 值是否会更改为具有非守护线程池的 executorService。
如果有人能帮我澄清一下 ExecutionContext.implicit.global 的价值,在只有 Future 没有 actor 的情况下,在 Actor 的情况下,以及在 Actor 的 future 情况下,我将不胜感激?特别是它管理 Deamon 或非 Deamon 的线程类型(关于之前引用的上下文)?如果可能的话,关于它的文档。
java.util.concurrent.ThreadFactory
创建 Deamon 或非 Deamon 类型的线程。
默认情况下 ExecutionContext.global
将 ForkJoinPool
与生成守护线程的线程工厂一起使用。
在 akka 配置中有 akka.daemonic
属性 默认情况下是 off
(在 reference.conf
中)。在为默认调度程序和调度程序创建默认线程工厂时使用此标志。
最好的文档是 Akka 和 Scala 库的源代码。
我在 Tomcat 容器中遇到了无法关闭 Spray 应用程序的类似问题。使用 Java Mission Control,我发现在成功关闭 actor 系统后,调度程序线程正在 akka.actor.LightArrayRevolverScheduler.waitNanos(long)
中休眠。 akka.daemonic = on
的设置解决了这个问题。
我在某处听说默认情况下有一个 Actor 系统,这意味着它的 ExecutorService/Dispatcher 正在为 运行 Actor 创建一个非 Deamon 线程池。如果确实如此,那将解释我所经历的一些行为,我可以在 AKKA 的文档中找到它。我的意思是在文档的最新版本中没有任何说明。同时,这也发生了变化。
有些人在主线程中使用了 AwaitTermination,以防止程序不关闭正在 运行ning 的 actor 系统。我见过这样的代码片段。
但后来我意识到它没有用。
仍然对这种行为感到困惑我继续试验期货,但它没有用,我不得不阻止我的主。但是,当在 Actor 中使用时,它会起作用。那是因为未来 运行 宁在守护线程中。
理解这些差异非常重要。
导入时 ExecutionContext.implicit.global :
1 - 当 运行 未来时,执行上下文是 Deamon 或非 Deamon 线程的线程池
2 - 当 运行在 Actor 中建立未来?会发生什么,这与在 actor context.dispatcher 中导入一样吗?在这种情况下,当启动一个 Actorsystem 时,ExecutionContext.implicit.global 值是否会更改为具有非守护线程池的 executorService。
如果有人能帮我澄清一下 ExecutionContext.implicit.global 的价值,在只有 Future 没有 actor 的情况下,在 Actor 的情况下,以及在 Actor 的 future 情况下,我将不胜感激?特别是它管理 Deamon 或非 Deamon 的线程类型(关于之前引用的上下文)?如果可能的话,关于它的文档。
java.util.concurrent.ThreadFactory
创建 Deamon 或非 Deamon 类型的线程。
默认情况下 ExecutionContext.global
将 ForkJoinPool
与生成守护线程的线程工厂一起使用。
在 akka 配置中有 akka.daemonic
属性 默认情况下是 off
(在 reference.conf
中)。在为默认调度程序和调度程序创建默认线程工厂时使用此标志。
最好的文档是 Akka 和 Scala 库的源代码。
我在 Tomcat 容器中遇到了无法关闭 Spray 应用程序的类似问题。使用 Java Mission Control,我发现在成功关闭 actor 系统后,调度程序线程正在 akka.actor.LightArrayRevolverScheduler.waitNanos(long)
中休眠。 akka.daemonic = on
的设置解决了这个问题。