线程模型和AKKA

马特·德蒙

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

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

但是后来我意识到这是没有用的。

通过这种行为仍然令人困惑,我继续尝试期货,但是它没有用,我不得不阻止我的主要交易。但是,当在Actor中使用时,它可以工作。那是因为将来在守护程序线程中运行。

理解这些差异非常重要。

当一个导入ExecutionContext.implicit.global时:

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

2-在Actor中创造未来时?会发生什么,与在actor context.dispatcher内部导入相同吗?在这种情况下,当启动Actorsystem时,ExecutionContext.implicit.global值是否会更改为具有非守护进程线程池的executorService。

如果有人可以帮助我澄清一下,ExecutionContext.implicit.global的值在没有参与者的情况下,除了Future之外,在Actor的上下文中,以及在Actor内部的future的上下文中,我会很感激。特别是,它管理Deamon或非Deamon(相对于前面引用的上下文)是哪种线程?如果可能,请提供有关它的文档。

安德烈(Andriy Plokhotnyuk)

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

默认情况下,该线程与产生守护程序线程的线程工厂配合ExecutionContext.global使用ForkJoinPool

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章