アクターでreceiveを使用しているときに、while(true)ではなくloopを使用する点の違いは何ですか?ループははるかに速く動作するようですが、なぜ、そしてボンネットの下で何が起こっていますか?while(true)の代わりにloopを使ってスカラーアクターを使うとどうなりますか?
while(真)ではなくloopを使用するのは悪いですか?
コンテキストの詳細。シンプルなping/pongコード内でパフォーマンステストを行っています。そして、私は受信を使用しています。
これは、Pingのクラスである:
class ReceivePing(
count : Int,
pong : Actor
) extends Actor {def act() {
var pingsLeft = count - 1
pong ! Start
pong ! ReceivePing
while(true) {
receive {
case ReceivePong =>
if (pingsLeft % 10000 == 0)
Console.println("ReceivePing: pong")
if (pingsLeft > 0) {
pong ! ReceivePing
pingsLeft -= 1
} else {
Console.println("ReceivePing: stop")
pong ! Stop
exit()
}
}
}}}
代わりに、一方(真)には、ループとのより良い行います。
おかげ
それは受信または反応がスレッドに影響を与えないことを意味します。 "while"と "loop"キーワードはスレッドを制御しています。 – Zerdush
@Zerdushいいえ、 'loop'と' react'はスレッドに影響を与えます - 両方とも解放します。 'while'も' receive'もスレッドを解放しません。 –