3

私にはそれらは同じもののように見えますが、登録されたプロセスが「アクター」という用語で偽装されているだけです。

アップデート:

それ以来、私は自分の考え方に誤りがあることに気づきました。私はErlangに慣れていないので、アクターがまったく属していない場所でアクターを使用していたと思います(これのアンチパターン名はどこかにありますか?)

4

2 に答える 2

7

プロセス登録を使用してサンプル コードを単純化する例をよく見かけます (別の関数パラメーターを避けることによって)。これには、初心者がプロセス登録を大量に使用する傾向があるという効果があります (モンキー・シー、モンキー・ド)。

また、彼ら (初心者) は、通常の操作の一環として登録を変更する傾向があります。それらは、登録するアトムを構築する傾向があり、プロセスを検索するために他のプロセスにアトムを構築させます。これを行うと、状態の同時実行性が共有されます (制限されていますが、まだ悪いです)。

レジストリは次の目的で使用する必要があります (これらは、いつ使用するかについての私自身のルールです):

  • 長期にわたるサービス。それは、光速などの定数を参照するときと同じくらいグローバルな状態です。
  • 実行中のシステムのデバッグを支援するためにプロセスを登録しますが、これらの名前はコードで参照されるべきではなく、シェルで人間によってのみ参照されます

登録された名前にはプレフィックス (通常はアプリケーション名) が必要であり、実行時間の長いアプリケーションは OTP.appファイルに含まれている必要があります。

于 2010-02-23T14:57:34.683 に答える
5

登録されたプロセス、プロセス ID (Pid) に対するグローバル識別子であり、それ自体がプロセスをアドレス指定するグローバルな方法です (事前に不明なだけです)。

ただし、グローバル識別子を使用することはグローバル変数と同じであると言うことは、問題をまったく混同しています。「URI はグローバル変数です」などと言うのと似ています。スコープ、可変性、カプセル化、およびデータの分離の点で根本的な違いがあり、それらが本当に異なります。

アクター モデルは、同時計算に関する一般的な概念であることに注意してください。Erlang プロセスは、アクター モデルを実装するための多くの潜在的な方法の 1 つにすぎません。Scala、E、Axum、およびその他の多くの言語がアクターを使用したプログラミングをサポートしていますが、実装はかなり異なります。

于 2010-02-22T19:49:54.880 に答える