gpt4 book ai didi

akka - 线程模型和 AKKA

转载 作者:行者123 更新时间:2023-12-01 06:32:54 37 4
gpt4 key购买 nike

我在某处听说默认情况下是一个 Actor 系统,这意味着它的 ExecutorService/Dispatcher 正在创建一个非 Deamon 线程池来运行 Actor。如果确实如此,那将解释我所经历的一些行为,我可以在 AKKA 的文档中找到它。我的意思是在文档的最新版本中没有任何说明。同时,这也发生了变化。

有些人在主线程中使用了AwaitTermination,以防止程序不关闭正在运行的actor系统。我见过这样的代码片段。

但后来我意识到它没有用。

仍然对这种行为感到困惑,我继续试验 future ,但它没有用,我不得不阻止我的主。但是,当在 Actor 中使用时,它会起作用。那是因为 future 在守护线程中运行。

理解这些差异非常重要。

当导入 ExecutionContext.implicit.global 时:

1 - 运行 future 时,执行上下文是 Deamon 还是非 Deamon 线程的线程池

2 - 在 Actor 中运行 future 时?会发生什么,这与在 actor context.dispatcher 中导入一样吗?在这种情况下,当启动一个 Actorsystem 时,ExecutionContext.implicit.global 值是否会更改为具有非守护线程池的 executorService。

如果有人可以帮助我澄清一点,ExecutionContext.implicit.global 在没有 Actor 但 Future 的背景下,在 Actor 的背景下,以及在 Actor 的 future 背景下的值(value),我将非常感激?特别是它管理 Deamon 或非 Deamon 的线程类型(关于之前引用的上下文)?如果可能的话,关于它的文档。

最佳答案

java.util.concurrent.ThreadFactory 创建 Deamon 或非 Deamon 类型的线程。

默认情况下,ExecutionContext.globalForkJoinPool 与生成守护线程的线程工厂一起使用。

在 akka 配置中有 akka.daemonic 属性,默认情况下是 off(在 reference.conf 中)。在为默认调度程序和调度程序创建默认线程工厂时使用此标志。

最好的文档是 Akka 和 Scala 库的源代码。

我有类似的问题,即 Tomcat 容器中的 Spray 应用程序没有关闭。使用 Java Mission Control,我发现在成功关闭 actor 系统后,调度程序线程正在 akka.actor.LightArrayRevolverScheduler.waitNanos(long) 中休眠。 akka.daemonic = on 的设置解决了这个问题。

关于akka - 线程模型和 AKKA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486834/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com