私は Scala と Akka を同時に学ぼうとしていますが、それは素晴らしいことですが、少し混乱することもあります。質問が断片化して申し訳ありません。
アクターモデルはわかります。アクターがいて、メッセージを送受信し、受信したメッセージを保存するメールボックスがあり、メールボックスがメッセージに優先順位を付けることができ、すべてが混乱します。
私はたくさんの本を読んできましたが、読めば読むほど混乱するので、誰かが混乱のレベルを許容可能な最小値まで減らすための助けを提供してくれることを願っています. ポインタは大歓迎ですが、すべてをまとめるにはちょっとした接着剤の説明が必要かもしれません。基本的には RTFM の助けになります。
質問は次のとおりです。
- 受信トレイでメッセージを並べ替えるにはどうすればよいですか? 「暗黙の」(順序付けられたメールボックスで) について読んだことがありますが、それは魔法のように聞こえます。ソートされたメールボックスはインターフェイスを実装する型のみを受け入れると思って
Comparable
いましたが、ここで Scala は関数型パラダイムを使用し、ordering
間違っていなければ関数を受け入れますOrdering[T]
。ただし、順序付け関数 (? で動作) は、同等のオブジェクトに制限される可能性があるため、 ?T
に戻ります。Comparable
- メールボックスを共有する可能性はありますか?
- ここでバスの実装を使用する必要がありますか? バスの仕分けはできますか?
- とは何
implicit abstract def
ですか?abstract
実装する必要がある ( ) が、実装する必要がない( )メソッドのように見えますがimplicit
、矛盾しているように聞こえます。(これは の定義ですSortedSet
) - を定義する必要があります
Dispatcher
か? それがアーキテクチャ全体でどのように一致するかを理解できませんでした。しかし、私はプールを探し続け、代わりにディスパッチャーを見つけています。 - sについて読むべき
Future
ですか?読み取りとプログラミングのループで、概念を徐々に把握するための小さな実装を作成しようとしています。たくさんの質問を重ねて申し訳ありません。
私がこれまで考えてきた解決策は次のとおりです。
- 通信の中心ノードであるアクターを持つ。
- この中央のアクターは、アクター
SortedSet
のプールにディスパッチされるメッセージがエンキューされる場所を保持します - この中心的なアクターは、
Set
無料のアクターも保持します。 - アクターが解放されると (メッセージを処理した後)、解放されたアクターは中央のアクターにメッセージを送信して、何らかの作業を行うように求めます。
- 中央のアクターがメッセージを処理します。
- 保留中の作業がある場合は、処理が必要なメッセージをデキューします。
- やるべき仕事がない場合、フリーエージェントへの参照が保存され、彼に仕事が送られます。
- 中央のアクターは、メッセージをジョブ タスクと同様に処理します。
- フリー アクターが存在する場合、ジョブはフリー アクターに送信されます。
- フリー アクターがいない場合、ジョブは に追加され
SortedSet
ます。
- アクターのプールは、アクターを作成し、すべての参照を中央マネージャーに送信するだけで作成されます。
ScalaもAkkaもよく知らないので、この解決策を考えました。しかし、私はこの種のソリューションにいつまでもとらわれたくありません。基本的にアクターは何でもできますが、私はそれらを適切に使用し、メールボックス、バス、プール、ディスパッチャー、フューチャーなどの他のすべての要素を適切に使用したいと考えています.
どうもありがとうございました。