問題タブ [pulsar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
276 参照

clojure - 最後の更新以降に受信したすべてのメッセージを操作する clojure のエージェント/アクターのような構造

次のことを行うアクターまたはエージェント(非同期的に更新され、調整されていない参照)のようなものを実装するためのclojureの最良の方法は何ですか?

  • 送信されたメッセージ/データを取得します
  • そのデータに対して何らかの関数を実行して、新しい状態を取得します。何かのようなもの(fn [state new-msgs] ...)
  • その更新中にメッセージ/データを受信し続けます
  • その更新が完了すると、その間に送信されたすべてのメッセージに対して同じ更新機能を実行します

エージェントはここでは適切ではないようです。機能とエージェントへのデータを同時に処理する必要があり、最後の更新中に入ってきたすべてのsendデータを操作する機能の余地がありません。この目標には、機能とデータの分離が暗示的に必要です。

アクター モデルは、関数とデータが切り離されているという点で、一般的に適しているようです。ただし、私が認識しているすべてのアクター フレームワークは、送信された各メッセージが個別に処理されることを想定しているようです。追加の機械を追加せずに、これをどのように頭に入れるかは明らかではありません。Pulsar のアクターは、アクターに「特別なトリック」を実行させるために使用できる関数を受け入れていることは知って:lifecycle-handleいますが、これに関するドキュメントはあまりないため、その機能が役立つかどうかは不明です。

エージェント、チャネル、および関数を使用てこの問題を解決する方法はありますが、少し面倒です。より良い解決策があることを願っています。他の人が役立つと思う場合に備えて、解決策として投稿しますが、他の人が何を思いついたのか見てみたい.core.asyncwatch