gpt4 book ai didi

java - 为什么 Akka 保留所有这些线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:30 28 4
gpt4 key购买 nike

我正在使用 Akka 并行执行一系列非常短的任务。我使用 system.actorOf 创建了一个父 Actor,它使用 context().actorOf 创建了 25 个其他 Actor。然后我在父 Actor 中调用 context().stop(getSelf()),这应该会停止所有子 Actor。

我正在观察 VisualVM 中的线程状态以了解 Akka 如何在后台工作,我注意到当我在父 Actor 上调用 stop() 时,由Akka 开始慢慢地在不同的时间被一个接一个地杀死,其余的则停在原地。在所有线程被杀死前 10 分钟,但这是我调用 stop() 后不久的快照,您可以在其中看到默认调度程序中的一些线程被杀死,但大多数线程仍处于停放状态:

enter image description here

为什么这些线程不会同时被杀死?为什么它们会看似任意地一次一个被杀死?为什么让他们中的任何一个停放?我创建的其他 actor 似乎没有重用这些线程。

最佳答案

默认调度程序使用 Java 的 ForkJoinPool。这将根据需要添加线程来运行作业,然后在它们空闲一段时间后逐渐关闭它们。 API 中无法保证空闲线程将存活多长时间,因此取决于实现。如果您想更明确地处理线程数,您可以使用不同类型的池,例如固定线程。

ForkJoinPool

关于java - 为什么 Akka 保留所有这些线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708748/

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