共有メモリまたは tcp ソケット プログラミングの概念を使用して 2 台のコンピュータ間で通信するための概念を構築する必要があります..どうすればよいですか?クライアント サーバー アーキテクチャに共有メモリを実装することは可能ですか?どうすればよいですか?
6 に答える
メモリを共有していないため、共有メモリを使用して 2 台のコンピューター間で通信することはできません。
TCP ソケットを使用する必要があります。
共有メモリ を使用してリモート システムと通信できます。リモート DMAは、新しい高性能ネットワーク インターフェイス コントローラ カード (NIC) の機能です。
これは、 10 Gb イーサネットRDMA のパフォーマンスを評価した論文です。私は infinaband が RDMA もできることを知っています。802.11 XXX が出たらいいですね。ワイヤレス RDMA? :)
あなたが探しているのは、共有メモリというよりも、「反射メモリ」のようなものと呼ばれる方が適切だと思います。
リフレクティブ メモリ ブロックを使用すると、ネットワーク上の各コンピュータがメモリ ブロックを所有します。すべてのブロックは、高速ですべてのコンピューター間のバスにパントされます。各コンピューターは、読み取り用に他のすべてのコンピューターからメモリのコピーを取得しますが、通常は自分のメモリにのみ書き込むことができます。
したがって、各コンピュータは、他のすべてのコンピュータのメモリの状態を「見る」ことができます。通常、この種のアーキテクチャは、物理的に離れたマシンに制御を分散し、ほぼリアルタイムで全体の状態を確認したい産業用制御システムで見られます。
システムの構築に関しては、ローカル コンピューターの状態を爆破し、他のすべてのコンピューターにそのデータを読み取らせる UDP パケットから始めることができます。
「コンピュータはメモリを共有していないので、それはできません」という卑劣な答えは、まったく間違っています。単一のコンピュータ内のプロセッサはメモリを共有しません。ハードウェアとソフトウェアは共有メモリプロトコルを実装して、共有メモリの錯覚を提供します。
プロセッサ間での共有メモリプロトコルは、コンピュータ間での共有メモリプロトコルと非常によく似ており、同じ問題です。
「分散キャッシュ」、「タプルスペース」、「分散共有メモリ」を検索すると、思考の糧になる可能性があります。memcachedは、非常に人気のあるオープンソース製品です。
編集:「キャッシュコヒーレントアーキテクチャ」に関するコメントについて。各プロセッサには、独自のメモリのローカルキャッシュ(たとえば、L1キャッシュ)があります。各プロセッサが共有メモリ空間に対して読み取りと書き込みを行っているように見えるように、この「キャッシュコヒーレント」を作成するための「もの」がたくさんあります。プロセッサは絶対に、積極的に単一の共有メモリ空間に直接書き込みを行っていません。この問題は、コンピュータ間で共有されるメモリについても概念的に同じです。