0

Akka を使用して複数のリーダー/1 つのライターのパターンをデータ構造に実装したいのですが、アクター モデルの設計に行き詰まっています。

私が最初に考えたのは、外部要求 (読み取りまたは書き込み) を受け取るスーパーバイザー アクターを用意することでした。読み取り要求は、非同期処理のためにリーダー アクターに転送されます。書き込み要求は、すべてのリーダーが終了するのを待ってから、同期的に処理されます。

私の問題は、「すべての読者が終了するのを待つ」部分をどのように実装するかです。

私は最初、スーパーバイザーにカウンターを置くことを考えました。カウンタは、スーパーバイザがメッセージをリーダーに転送するたびにインクリメントされます。リーダーは、終了時に「I am done」メッセージをスーパーバイザーに送り返し、カウンターを減らします。ただし、「I am done」メッセージは外部要求と同じメールボックスに送られるため、これはデッドロックにつながると思います。スーパーバイザが書き込み要求を同期的に処理していた場合、「I am done」がそれに到達することはありません。

私は本当にデザインにこだわっています。どんな助けでも大歓迎です。

4

2 に答える 2

0

上記のコメントごと。

スーパーバイザー アクターにキューを追加して、着信要求をキューに入れます。リーダーが完成したメッセージを送り返したら、タスクをキューから取り出してリーダーに渡します。

于 2012-06-27T17:43:43.913 に答える
0

投稿は古いですが、誰かを助けるかもしれません。Await でFutureを使用し、Futureが完了する場所 (onComplete または onSuccess) で、書き込みアクションを処理します。

于 2015-05-22T14:25:34.263 に答える