7

アクター モデルと Web ワーカーがどのように機能するかを理解しようとしています。

https://dzone.com/articles/html5-web-workers-classicでは、「Web ワーカーは、スクリプトが明確に定義された不変メッセージを介してのみ通信できるメッセージ パッシング モデルを提供し、データを共有せず、シグナリングまたはデータの整合性のために同期メカニズムを使用してください。」

私には、俳優モデルに非常に似ているように聞こえます。違いはありますか?

更新: ベンジャミン・アーブによると:

アクター モデルの基本的な考え方は、さまざまな方法でメッセージを受信したときに動作できる並行プリミティブとしてアクターを使用することです。

1.有限数のメッセージを他のアクターに送信します。
2. 有限数の新しいアクターをスポーンします。
3. 独自の内部動作を変更し、次の着信メッセージが処理されたときに有効になります。"

最初の 2 つは当てはまりますが、最後の 1 つはどうでしょうか。

4

1 に答える 1

6

はい、アクター モデルは、ワーカーがどのように機能するかをよく表しています。ただし、アクター モデルには実装に依存する抽象的な要件がいくつかありますが、アクター モデルに準拠することをお勧めします。ウィキペディアで全文を読むことができます。

ただし、1 つ指摘しておきたいことがあります。

メッセージの到着順は不要

これは実装に依存するものであり、この要件に準拠することを強くお勧めします。これは、たとえば、データをチャンクで送信する場合、チャンク インデックスを指定することを意味します。ワーカー メッセージは送信された順序で到着しますが、コードが複雑になったら、それに依存しないことをお勧めします。

独自の内部動作を変更し、次の着信メッセージが処理されたときに有効になります (「更新」に従って)

この点は前のものと競合します。しかし、少なくとも Web ワーカーのチュートリアルを読んだ人なら誰でも、答えは明らかです。はい、ワーカーはそれを行うことができます。次のコードを検討してください。

var name = "Worker";
self.addEventListener("message", (e)=>{
  if(typeof e.data.newName=="string") {
    name = e.data.newName;
  }
  if(e.data.command == "sendName") {
    self.postMessage({myName: name});
  }
});

言うまでもなく、ワーカーに新しい名前を送信すると、"sendName"メッセージへの応答はその時点から異なります。このような動作の変更は些細なことですが、任意に複雑になる可能性があります。


アクター モデルに興味がある場合は、javascript 実装Vert.xも参照してください。

注:ワーカー間でブロックする方法はありますが、これらはハックであり、意図したものではありません。私が考えることができるのは、サーバーがロックを保持している非同期XHRです。これはアクターモデルの例外には数えられないと思います。

于 2016-04-15T21:42:49.600 に答える