我使用 Akka 及其 Java API UntypedActor 实现了一个 Actor 系统。其中,一个参与者(类型 A)根据需要动态启动其他参与者(类型 B),使用getContext().actorOf(...);
。那些 B 演员将进行一些 A 不再真正关心的计算。但我想知道:那些B型演员演完了有必要清理掉吗?如果是这样,怎么办?
- 让B演员打电话
getContext().stop(getSelf())
他们什么时候完成?
- 让B演员打电话
getSelf().tell(Actors.poisonPill());
他们什么时候完成? [这就是我现在正在使用的]。
- 什么都不做?
- By ...?
文档对此并不清楚,或者我忽略了它。我对 Scala 有一些基本知识,但 Akka 源代码并不完全是入门级的东西......
您所描述的是根据“请求”(在 A 的上下文中定义)创建的单一用途参与者,它们处理一系列事件然后完成,对吗?这绝对没问题,您关闭它们是正确的:如果您不这样做,它们会随着时间的推移而累积,并且您会遇到内存泄漏。最好的方法是您提到的第一种可能性(最直接),但第二种也可以。
一些背景知识:参与者在其父级中注册以便可识别(例如,在远程处理中需要,但在其他地方也需要),并且这种注册可以防止它们被垃圾收集。 OTOH,每个父进程都有权访问它创建的子进程,因此自动终止(即通过 Akka)没有意义,而是需要在用户代码中显式关闭。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)