Akka初心者の質問 - Akka Essentialsを読んでいる人、Akka Stop/Poison Pill vs. Killの違いを教えてもらえますか?この本はちょっとした解説を提供しています。「キルは同期対毒薬が非同期です。」しかし、どのように?この間、呼び出し元のアクタースレッドはロックされますか?殺したり、ポストストップで召喚したりしている間に、子供の役者に通知されていますか? 1つの概念と他の概念の使用例アクカ殺し対ストップ対ポイズンピル?
多くの感謝!
Akka初心者の質問 - Akka Essentialsを読んでいる人、Akka Stop/Poison Pill vs. Killの違いを教えてもらえますか?この本はちょっとした解説を提供しています。「キルは同期対毒薬が非同期です。」しかし、どのように?この間、呼び出し元のアクタースレッドはロックされますか?殺したり、ポストストップで召喚したりしている間に、子供の役者に通知されていますか? 1つの概念と他の概念の使用例アクカ殺し対ストップ対ポイズンピル?
多くの感謝!
stop
とPoisonPill
の両方が、アクターを終了してメッセージキューを停止します。彼らは俳優にメッセージの処理を中止させ、すべての子どもにストップコールを送り、彼らが終了するのを待ってから、postStop
フックを呼び出します。それ以降のメッセージはすべて、デッドレターメールボックスに送られます。
違いは、このシーケンスが開始される前にメッセージが処理されることです。 stop
コールの場合、現在処理中のメッセージが最初に完了し、他はすべて破棄されます。 PoisonPill
を送信する場合、これは単にキュー内の別のメッセージであるため、PoisonPill
が受信されるとシーケンスが開始されます。キュー内で先行するすべてのメッセージが最初に処理されます。
対照的に、Kill
メッセージは、通常のスーパバイザ機構を使用して処理されるActorKilledException
を投げるアクタを引き起こします。したがって、ここでの行動は、スーパーバイザ戦略で定義した内容に依存します。デフォルトでは、アクタが停止します。しかし、メールボックスは存続するので、アクターが再起動すると、失敗の原因となったメッセージ以外は古いメッセージが残ってしまいます。監督の戦略上の
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
そして、もっと:
また、ドキュメント内のセクション '俳優キリング'、 '俳優の停止' を参照
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
すばらしい答えありがとう、Akkaチュートリアルに投稿する必要があります! – LaloInDublin
ActorKilledExceptionがStop、Restartに解決されるため、デフォルト以外のスーパーバイザストラテジを使用しない限り、Killメッセージは通常のスーパーバイザメカニズムを使用してアクタを再起動させません。 – lisak
実際には、俳優を再起動する唯一の組み込み方法がExceptionを投げているので、かなり迷惑です。 – lisak
PoisonPillは非同期に停止しますPoisonPillの前に、メールボックスに受信されたすべてのメッセージで処理された後の俳優。
いいえ、Killには特別な優先度はありません.PyisonPillのように –
できるだけPoisonPillを使用してください。それはメールボックスに置かれ、他のメッセージと同様に消費されます。また、アクター内から「context.stop(self)」を使用することもできます。
rs_atlは非常にうまく答えました。私は、アクターについての何も同期的ではなく、context.stop(self)でさえないと付け加えておきます。 –
@RolandKuhn 'context.become'はどうですか? –
'context.become'は、次のメッセージに適用される動作を指定します。つまり、現在のメッセージが処理された後に有効になります。これに関しては 'context.stop(self)'と非常に似ています。 –