我在某处听说过,默认情况下是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(相对于前面引用的上下文)是哪种线程?如果可能,请提供有关它的文档。
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
解决此问题的设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句