我对此完全陌生,但这里有一个 Scala 演员,它是用我的班级创建的,只为其他演员生成消息。我希望它每秒都醒来,收集一些指标,将它们发送给其他参与者,然后重新入睡。终止应用程序时,我需要向该参与者发送消息以退出
class Node() {
println("A new Node is being constructed")
val load_monitor: Actor = actor {
val s: Sigar = new Sigar
while (true) {
Thread.sleep(1000);
// Will be replaced with something like
// load_manager | s.getCpuSystem
println(s.getCpuPerc)
self.receiveWithin(100) {
case "EXIT" => exit()
case TIMEOUT => {}
}
}
}
// Other Node code below...
}
这似乎有效,但我不相信它是正确的。调用 Thread.sleep 聪明吗?如果这是一个完整的线程,我现在有一个睡眠线程。如果这是一个事件,我现在是否阻止了一些事件处理队列?我可以使用接收/反应的东西更正确地做到这一点吗?我无法理解接收/反应是否有效地停止了演员的执行,这意味着我无法每秒醒来检查指标。下面的代码我也考虑过,不知道是不是比上面的代码好!
class Node() {
println("A new Node is being constructed")
val load_monitor: Actor = actor {
val s: Sigar = new Sigar
while (true) {
self.receiveWithin(1000) {
case "EXIT" => exit()
// Will be replaced with something like
// load_manager | s.getCpuSystem
case TIMEOUT => println(s.getCpuPerc)
}
}
}
// Other Node code below...
}