共有メモリまたはTCPソケットプログラミングの概念を使用して2台のコンピュータ間で通信するコンセプトを構築する必要があります。これについてはどうすればよいですか?クライアントサーバーアーキテクチャで共有メモリを実装することは可能ですか?btw 2台のPCが共有メモリを使用して通信しますか?
答えて
共有メモリを使用する2台のコンピュータ間では、メモリを共有しないため通信できません。
TCPソケットを使用する必要があります。
私は共有メモリではなく、あなたが探しているものを「反射メモリ」のように呼びます。
リフレクティブメモリブロックでは、ネットワーク上の各コンピュータが1ブロックのメモリを所有します。すべてのブロックは高速の速度ですべてのコンピュータ間のバスの周りにパントされます。各コンピュータは、他のすべてのコンピュータから読み取るためにメモリのコピーを取得しますが、通常は自分のメモリに書き込むことしかできません。
したがって、各コンピュータは、他のすべてのコンピュータのメモリの状態を「見る」ことができます。通常、物理的に別々のマシンに制御を分散し、ほぼリアルタイムで全体の状態を確認したいという産業用制御システムでは、この種のアーキテクチャがあります。
システムを構築するには、ローカルコンピュータの状態を爆発させ、他のすべてのコンピュータにそのデータを読み取らせるUDPパケットから始めてください。
「コンピュータがメモリを共有しないのでできない」というスニークな答えは間違っています。 1台のコンピュータ内のプロセッサはメモリを共有しません。ハードウェアとソフトウェアは、共有メモリの錯覚を提供するために共有メモリプロトコルを実装しています。
プロセッサ間の共有メモリプロトコルは、コンピュータ間の共有メモリプロトコルと非常によく似ています。同じ問題です。
"分散キャッシュ" "タプルスペース"を検索し、"distributed shared memory"を考えると、思考のために食べ物を提供するかもしれません。 memcachedは非常に一般的なオープンソース製品です。
EDIT: "キャッシュコヒーレントアーキテクチャ"に関するコメントについて。各プロセッサには、独自のローカルキャッシュメモリ(L1キャッシュなど)があります。この "キャッシュ一貫性"を生み出すような "もの"がたくさんあるので、各プロセッサが共有メモリ空間に読み書きしているように見えます。プロセッサは、絶対に、積極的に単一の共有メモリ空間に直接書き込むことはありません。この問題は、概念的にはコンピュータ間の共有メモリでも同じです。
これは間違っています。キャッシュコヒーレントアーキテクチャ(x86など)では、同じコンピュータ上のプロセッサがメモリを共有します。 – Zifre
これでL1キャッシュとは何ですか? –
プロセッサごとのキャッシュ。プロセッサは主メモリを共有し、同じメモリ位置からL1キャッシュを埋めます。 –
memcachedのような分散メモリオブジェクトキャッシュシステムを調べるとよいでしょう。
許可されても、これはTCP経由で行われます。
CANは、共有メモリを持つリモートシステムと通信します。リモートDMAは、新しい高性能ネットワークインターフェイスコントローラカード(NIC)の機能です。
RDMAの性能を評価した論文は以下の通りです:10 Gb ethernet RDMAの性能。私はinfinabandもRDMA、他の可能性があります知っている。 802.11のXXXが出てきたらうれしいですか?ワイヤレスRDMA? :)
リンクが死んでいますが、ウィキペディアには記事があります:http://en.wikipedia.org/wiki/Remote_direct_memory_access – RandomNickName42
私はBeej's guide to Network Programmingをお勧めします。
- 1. RabbitMQを使用して1台のPCから別のPCにメッセージを送信
- 2. 共有メモリを使用して信号/スロットQObjectをシリアル化
- 3. Boost :: asio、共有メモリとプロセス間通信
- 4. 直接接続された2台のPC間のUDP通信
- 5. Javaを使用した2台のマシン間の通信
- 6. 共有メモリをPHPとCで使用していますか?
- 7. 2台のコンピュータからのファイル共有。
- 8. ソケットを介した通信:1台のサーバーと2台のクライアント
- 9. 共有メモリを使用してCoDeSysプラットフォームと非CoDeSysプラットフォーム間の通信を確立する方法は?
- 10. どのように共有メモリは異なるメモリアドレスを使用してデータを共有しますか?
- 11. OrientDBは2つの共通データベースを共有します
- 12. データ配信と共有メモリ
- 13. 2台のPC間で同じVisual Studio 2010プロジェクトの開発をどのように共有できますか?
- 14. ブーストライブラリを使用して共有メモリ内のノードのメモリを解放する
- 15. 2つのnode.jsサーバーがnowjsを使用して通信していますか?
- 16. ArduinoはPowerShellスクリプトを使ってPCと通信します
- 17. ローカル/共有メモリをグローバルキャッシュとして使用する
- 18. MapViewOfFileを使用した静的共有メモリの割り当て
- 19. C#自分のプロトコルを使用している2台のPC間でシリアルポート経由でデータを送信
- 20. Angular 2のng2共有ボタンを使用した共有
- 21. 2台のAndroidエミュレータ間の通信
- 22. エンティティフレームワーク共有モデルを使用したメモリ使用
- 23. 2台のPCを接続する
- 24. 2台のパネルがMATLAB GUIでuicontrolを共有できますか?
- 25. PCからPCへのUSB通信
- 26. 電子+反応+ 2つのウィンドウ間の通信はPCをフリーズしますか?
- 27. ブーストの共有メモリの使用
- 28. fork()で共有メモリを使用
- 29. GPUの共有メモリはMatlabでどのように使用できますか?
- 30. 2台のNICを経由して、ディスパッチプロキシを使用してトラフィックジェネレータを送信
あなたはフラッシュスティックでそれをすることができます:) – Prankster
私は、マックは2台のコンピュータがメモリを共有していないことを知っていると感じています - "クライアントサーバアーキテクチャで共有メモリを実装することは可能ですか?それについて?"答えは "はい、可能な、分散共有メモリの検索" –
分散共有メモリはソケットよりもはるかに難しく(遅い)。 – Zifre