現在、Erlang のプロセス モデルを研究しています。Erlangに関するテクニカル レポート(セクション 3、パラグラフ 2) で問題が発生しました。
これは、いくつかのスケジューラーを持つ 1 つの SMP VM で実行する代わりに、それぞれ 1 つのスケジューラーを持つ複数の SMP VMを実行する方が効率的な場合がある理由を説明しています。もちろん、複数の VM を実行するには、相互に通信しない、またはほとんど通信しない多くの並列タスクでアプリケーションを実行できる必要があります。
さて、この段落は私を混乱させます。単一プロセスの複数スケジューラのシナリオは確認できますが、単一のスケジューラで複数のプロセスを確認できません。おそらく、各プロセスには異なるノード名が付けられます。これは、特定のアプリケーションを変更しないと、このモデルで使用できないことを意味します。レポートでは、変更を必要としないという利点がSMP の重要な機能として言及されています。複数のプロセスが同じノード名を持っている場合、Erlang プロセス間のメッセージング ストームにより、パフォーマンスが悲惨なものになります。これは、メモリ内 amnesia の使用を想定しています。この記事で紹介されていない、ここにないプロセス モデルはありますか?
作者はここで何を言おうとしているのか? 彼は、マルチプロセスの単一スケジューラのケースでは、(複数の一意のノード名を考慮に入れるために) アプリケーションを書き直す必要があることを示唆しようとしていますか?
-- 編集 1: 問題の原因の明確化 --
質問はディスカッションを通じて回答されました。以下は私が抱えていたトラブルの概要です。
この質問の問題点は、私が思い出したように、ドキュメントが物理マシンごとに複数の Erlang エミュレーターを実行するシナリオに触れていないことです。エミュレーターは (産業用の) 物理マシンを表すことが常に示されています。また、計算効率のためにプログラムを明示的に分割しなければならないというシナリオは考慮されていません。この突然の紹介が私の苦しみの元になっています。
この慣例は依然として大量のプロセスを作成する方向に偏っており、将来的には Erlang の SMP エミュレーターに多くの改善が予定されています。これは、マシンごとに単一のノードが、好ましいアプリケーション設計を前提とすれば、依然として非常に実行可能なオプションであることを意味します。