9

Erlang/OTP とアクター モデルに関する興味深いブログ記事を読んでいました。また、Scala はアクター モデルをサポートしていると聞いています。これまでに集めた小さなものから、アクター モデルは処理を、メッセージを渡すことによって相互に通信するコンポーネントに分解します。通常、これらのプロセスは不変です。

これらの機能は言語固有のものですか、それともアーキテクチャ レベルのものですか? より具体的に言えば、ほぼすべての言語で同じアクター モデルを実装し、なんらかの形式のメッセージ キューを使用してワーカー プロセス間でメッセージを渡すことはできないのでしょうか? (たとえば、セロリのようなものを使用します)。それとも、Erlang や Scala などの言語は単純にこれを透過的に、かつはるかに高速に行うのでしょうか?

4

4 に答える 4

13

確かに、事実上すべての言語で「アクターライブラリ」を定義できますが、Erlangでは、モデルはその言語に組み込まれており、実際に使用できる唯一の同時実行モデルです。

Scalaのアクターシステムは適切に実装されていますが、結局のところ、Erlangが影響を受けないいくつかの危険に対して脆弱です。この論文に注目します。

これは、共有された可変状態をサポートする命令型言語で実装されたActorライブラリの場合に当てはまります。

これに対する興味深い例外はNodes.jsです。共有された可変状態がないという理由だけで、おそらくErlangと同じ分離プロパティを示すノード間のアクターでいくつかの作業が行われています。

于 2012-04-25T22:18:40.457 に答える
3

アクター モデルは、特定のプラットフォームやプログラミング言語に限定されるものではありません。結局のところ、単なるモデルです。

Erlang と Scala には、このモデルの非常に優れた有用な実装があり、これらのプラットフォームの典型的な技術スタックにうまく適合し、特定の種類のタスクを効果的に解決するのに役立ちます。

于 2012-04-25T21:17:50.693 に答える
1

上記の点に加えて、Erlangアクターモデルでプログラミングできる唯一の方法であるという事実により、コードは最初からスケーラブルになります。Erlangプロセスは軽量で、1台のマシンで10-100Kを生成できます(Pythonでは実行できないと思います)。これにより、問題へのアプローチ方法が変わります。たとえば、私たちの製品では、Erlangを使用してWebサーバーのログを解析し、Erlangプロセスを生成して各行を処理します。そうすれば、1つのログ行が破損したり、それを処理するプロセスがクラッシュしたりしても、他のログ行には何も起こりません。もう1つの違いは、OTPの使用を開始すると、プロセススーパーバイザーを取得し、プロセスを接続して、1つが終了した場合に他のすべてが接続するようにすることができることです。それ以外に、Erlangには他の素晴らしい機能がいくつかあります(ライブラリを介して他の言語で見つけることができますが、ここでもそれがあります '

于 2012-04-26T14:25:35.627 に答える
0

いいえ、アクター モデルについて言語固有のものはありません。実際、アクターは言語の一部ではなく、代わりにライブラリとして実装されている、質問で既に Scala について言及しています。(実際には、競合する 3 つのライブラリです。)

ただし、関数型プログラミングやオブジェクト指向プログラミングと同様に、言語でアクター プログラミングを直接サポートするか、少なくとも実装を容易にするいくつかの抽象化をサポートすると、まったく異なるプログラミング体験が得られます。C で関数型プログラミングまたはオブジェクト指向プログラミングを行ったことがある人なら誰でも、おそらくこれを理解するでしょう。

于 2012-04-26T13:20:17.560 に答える