Go と Erlang の並行処理へのアプローチを調べていると、どちらもメッセージ パッシングに依存していることに気付きました。
このアプローチでは、共有状態がないため、明らかに複雑なロックの必要性が軽減されます。
ただし、多くのクライアントがメモリ内の単一の大きなデータ構造 (サフィックス配列など) への並列読み取り専用アクセスを必要としている場合を考えてみましょう。
私の質問:
データは読み取り専用で、1 つの場所に存在するだけでよいため、ロックはほとんど不要になるため、共有状態を使用すると、メッセージ パッシングよりも高速でメモリ使用量が少なくなりますか?
この問題は、メッセージ パッシング コンテキストでどのようにアプローチされるでしょうか? データ構造にアクセスできる単一のプロセスがあり、クライアントはそこからデータを順番に要求するだけでよいでしょうか? または、可能であれば、チャンクを保持するいくつかのプロセスを作成するために、データをチャンクにしますか?
最新の CPU とメモリのアーキテクチャを考えると、2 つのソリューションに大きな違いはありますか? つまり、共有メモリを複数のコアで並列に読み取ることができますか? つまり、両方の実装がほぼ同じように動作するハードウェアのボトルネックがないということです。