私はこれにまったく慣れていませんが、これは私のクラスで作成され、他のアクターへのメッセージを生成するためだけに生きている 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 の呼び出しはスマートですか? これが完全なスレッドである場合、スリープ状態のスレッドがあります。これがイベントの場合、イベント処理キューをブロックしましたか? これをより適切に行うために、受信/反応のものを使用できますか? receive/react がアクターの実行を効果的に停止するかどうかを理解するのに苦労しています。つまり、メトリックをチェックするために毎秒目を覚ますことができませんでした。次のコードも検討しましたが、上記のコードよりも優れているかどうかはわかりません!
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...
}