scheduling - 使用 Akka 中的默认 Scheduler,我是否需要在目标 Actor 停止时手动取消事件?

标签 scheduling akka cancellation

当使用默认 Akka 系统调度程序(来自 actor 内部的 context().system().scheduler().schedule())上的方法以及接受目标 actor 的重载之一时,我是否需要使用返回的 Cancelleable 显式取消以在目标 actor 停止时释放资源?

我想调度程序可能是 watch()目标actor 并自动执行清理,但在文档中的任何地方都找不到它的明确说明。

最佳答案

Scheduler.schedule的变体其中需要一个 ActorRef不会监视那个actor(相对于计时器任务而言,它会有相当高的开销),因此您应该始终从actor的postStop中清除重复计时器。钩。

在本地情况下,我们检查 target.isTerminated ,但该方法总是返回 false对于不属于沼泽标准本地类型的参与者引用,因此您只能在特定情况下依赖此功能,然后当您扩展应用程序时,您的代码将停止正常工作。另一个考虑因素是上述检查在尝试发送消息时运行,这可能是“软泄漏”(即延迟清理),如果时间安排很长(根据用例,100 毫秒可能已经很长)。

关于scheduling - 使用 Akka 中的默认 Scheduler,我是否需要在目标 Actor 停止时手动取消事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299692/

相关文章:

java - 定期从日志文件中读取数据

java - Akka grpc 可以消费非 Akka 服务的数据吗

android - 取消进度对话框和异步任务

java - 使用计时器调度 Java 线程

algorithm - 作业需求最少的加权区间调度

scala - 为什么编译器找不到导入了 Implicits.global 的隐式 ExecutionContext?

multithreading - 通过 Akka 应用程序中的上下文切换导致 CPU 使用率高

go - 从完成 channel 和未关闭 channel 的 GC 生成 context.Context

c# - 停止线程、ManualResetEvent、volatile boolean 或 cancellationToken

c - 为用户空间线程库编写调度程序