この質問は、ここで尋ねられた質問のトピックと重複しています。
別の観点から、追加の説明を求めたいと思います。
分散コンピューティングでは、最終的にメモリの一貫性は、分散ロックなどを使用して、ネットワーク チャネルを介したメッセージ パッシングを使用して実装されます。メッセージ パッシング (IIUC) は、非常に低いレベルを除いて、常に並行性をなくすとは限りません。これは、通常、プロセスがお互いの状態に影響を与えるためです。そして、彼らは一貫した方法であると信じている方法でそうしています。
たとえば、単純なコマンド インタープリターをメッセージ パッシングの上に実装することができます。コマンドは、複数の熟知したプロセスから並行して実行される複数のリモート トランザクションの一部として送信できます。そのため、高レベルの対話では、ほとんどの場合、同時実行の設計が必要になります。つまり、IMO では、プロセスに長期操作のトランザクション セマンティクスがない可能性はほとんどありません。
さらに、値が一貫した状態でメッセージを送信しても、正確性は保証されません。この値がどのように生成されるか、入力データを提供したメッセージと変換された結果を発行するメッセージの間で何が起こるかが重要です。
一方、物理メモリとの低レベルの相互作用は常に、基本的にはバスを介して渡されるある種のメッセージです。したがって、最も低いレベルでは、共有メモリとメッセージ パッシングは同じです。
また、命令ごとのレベルでは、アラインされたロードとストアの原子性が通常保証されます。そのため、その区別はまだぼやけています。
散文的に言えば、共有メモリとメッセージパッシングの選択は、同時実行性とどのように関連していますか? 同時実行性を解決するための技術パターンと、並列プロセスの相互作用を定義および分析するための数学的モデルの選択の問題ですか、それとも、これらの手法を体系的に適用すると、システムの同時実行性の問題に根本的に影響を与えるアーキテクチャ パターンでもありますか?
ありがとう。
編集(いくつかの追加コメント):
どうやら、2 つの方法は正確さとパフォーマンスによって区別されます。しかし、この区別には次の問題があります。
私は、メッセージが大きく散らばった仮想データの転送のように振る舞うことができることを知っています。ただし、「値による」アプローチは、非ユニタリ (または手続き的に生成された) 論理データのアトミック読み取りを超えた同期なしでは一貫性を保証しません。一貫性によって、因果関係や変更の順序付けなどを暗示しています。実際、メッセージ パッシングでは、すべてのプロセスが独自のメモリを変更するだけです。プロセスは、そのプライベート メモリに対するコントローラーのように機能します。これは、データを所有するプロセスによってシリアル化されたメッセージ パッシングに加えて共有するようなものですが、メッセージごとに (メモリが単語ごとまたはキャッシュ ラインごとにシリアル化するのと同様に)基本)。メッセージの送信に関連するトランザクションの同期を保証するのは、アプリケーション プログラマの責任です。すなわち、複数の熟知したプロセスから 1 つのプロセスへのメッセージは、それらのプロセスが実行している操作のセマンティクスに対応する一貫した順序で送信する必要があります。所有しているプロセスへの制御メッセージを使用するか、競合者間の直接の調整を通じて行うことができますが、メッセージの同時実行性に対する何らかの制限が必要になる可能性が最も高くなります。
メモリーの共有は、ローカルのプロセス間通信 (競合を無視) では確かに高速ですが、マシン間の通信ではなぜこれが当てはまるのでしょうか? 分散コンピューティングの共有メモリは、ネットワーク通信の上に実装されます。したがって、共有メモリは、キャッシングの利点は別として、高速化することはできません。
明らかにテクニックが違います。私が理解できないように見えるのは、どちらにも本質的に有益なものがない場合に、それらが互いにどのように広く比較されるかということです. プラットフォームが何を提供し、ソフトウェアが何を達成しようとしているのかを想定する必要がありますが、そのような想定は普遍的に正しいとは言えません。