メッセージがスレッドセーフな方法で受信され、処理されると仮定します。しかし、私はakka/scala docsを読んでいましたが、まだ 'threadsafe'というキーワードに遭遇していませんでした。アクター(scala/akka):受信メソッドがスレッドセーフな方法でアクセスされることを暗示していますか?
答えて
おそらく、アクターモデルでは、各アクターインスタンスが独自のメールボックスを順番に処理すると想定されるためです。つまり、2つ以上の同時スレッドが1つのアクターインスタンスのコードを実行することは決してありません。技術的には、アクターのクラス(まだオブジェクトなので)にメソッドを作成し、それを複数のスレッドから同時に呼び出すこともできますが、これはアクターの使用規則から大きく逸脱します。そのモデルのスレッド安全性の保証をすべて失うからです。
これはまた、アクカがActorRefというコンセプトを導入した理由の1つです。メッセージハンドルを使ってアクターと通信できるが、そのメソッドを直接呼び出すことはできません。
私たちはそれはかなりよく文書があると思う:http://doc.akka.io/docs/akka/2.3.9/general/jmm.html
私はその文書を何度も読んだ。私はJVM初心者です。私の理解では、「起こる前に」は、「可視性」を実証するだけです。クリティカルセクションでは複数のスレッドが原因で問題が発生する可能性があります。 –
Akkaは、同じアクタのメッセージを同時に実行することを防ぐため、メールボックスの実行スケジュールを1回だけ許可することで同時にアクタを保護します。 (それは実行予定か、そうでないか)。 Mailbox Runnableを作ることで、新しいランナブルを割り当てるのを避けるだけでなく、簡単なCAS操作でメールボックスの実行スケジュールを1回だけにすることができます。スレッドは同じメールボックスを同時に処理しません。 –
すごい説明。これは確かに私がさらに読むことに役立ちます。しかし、1つの質問ですが、どのようにしてhttp://akka.io/docs/akka/1.2/general/jmm.htmlからメールボックスの「相互に排他的な処理」を推測できましたか? –
アクターは 'Treadsafe' です。アクターシステム(AKKA)は、各アクターに独自の「軽量スレッド」を提供します。これはトレッドではないことを意味しますが、AKKAシステムは、アクタが常に開発者自身のスレッドで実行されているという印象を与えます。つまり、メッセージを処理した結果として実行される操作は、すべての目的でスレッドセーフです。
しかし、変更可能なメッセージや公開状態を使用してAKKAを傷つけてはいけません。スタンドアロンの機能ユニットを開発すると、スレッドセーフになります。
も参照してください: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State
、より徹底的アッカのメモリモデルの研究とどのようにそれが「トレッド」の問題を管理用 http://doc.akka.io/docs/akka/2.3.12/general/jmm.html。
- 1. アクター範囲外の受信関数を実装してアクターに渡す方法
- 2. プロトコルの送信メソッドがスレッドセーフであることを保証する方法
- 3. このクラスがスレッドセーフであることを示しますか?
- 4. メッセージが受信されていることを確認する
- 5. このロックされていないTryGetValue()辞書アクセスはスレッドセーフですか?
- 6. 受信がメソッドと呼ばれるのはなぜですか?
- 7. 送信された暗号文と受信された暗号文が一致しません
- 8. ScalaでAkkaアクターのスレッドセーフなコレクション
- 9. Swiftで異なるメンバーのスレッドセーフにアクセスしていますか?
- 10. 暗号化モジュール内の暗号化されていないモジュールインスタンスの信号にアクセスできますか?
- 11. POSTをフラッシュで送信すると、PHPにログインしていないことが示されますか?
- 12. ビューコントローラのナビゲーションをチェーンする方法(NSNotificationが受信されていない)
- 13. このスレッドセーフな並行アクセスですか?
- 14. 次のコードは、メソッドの実装がC#ソースコードなしでのみdllとして提供されることを暗示していますか?
- 15. 「データが受信されていない」
- 16. 暗示的なブロードキャスト受信機とマニフェストの明示的なブロードキャスト受信機を区別する
- 17. 送信者に何も送信しないアクターをテストする方法
- 18. ブロードキャストレシーバは、ブロードキャストアナウンスを受信することを保証されていますか?
- 19. Twilio Voice Call Stateは、受信者が電話を受けていなくても「Connected」と表示されます。
- 20. 受信したデータがテキストボックスに表示される方法を変更する
- 21. resolve(x)で渡されたデータが定義されていないとして受信されました
- 22. がスレッドセーフな方法でコントロールへのアクセスを制御し
- 23. TCPで受信したすべてのデータが表示されない
- 24. 投稿メソッドが送信されたデータを受信しないのはなぜですか?
- 25. cpanelでホストされたメールの受信トレイへのアクセス方法
- 26. socket.FileSendメソッドを使用して送信されたTCP経由でファイルを受信する方法
- 27. 解決方法:暗号化されていない接続で広告IDを送信しています
- 28. フレックスイメージソースイベント、新しいソースがいつ受信されるかを知る方法?
- 29. php mail() - 送信されたメールを表示しますが、受信トレイ/スパムでは受信しません。
- 30. 特定のメールアドレス宛てに受信メールを受信すると、受信メールが返信されます
ありがとうございました。それは説明します。 –