web-dev-qa-db-ja.com

UNIXドメインソケットと共有メモリ(マップファイル)

共有メモリ(または代替のメモリマップファイル)と比較して、UNIXドメインソケットの速度はだれかわかりますか?

ありがとう。

45
SyBer

速度(共有メモリが速いが速い)よりもデザインの問題であり、ドメインソケットは間違いなくUNIXスタイルであり、問​​題ははるかに少なくなります。選択に関しては、事前に知っておいてください。

ドメインソケットの利点

  • ブロッキングモードと非ブロッキングモード、およびそれらの間の切り替え
  • タスクが完了したときにそれらを解放する必要はありません

ドメインソケットの欠点

  • 直線的に読み書きする必要があります

共有メモリの利点

  • 非線形ストレージ
  • ブロックすることはありません
  • 複数のプログラムがアクセスできる

共有メモリの欠点

  • ロックの実装が必要
  • プログラムで使用されていない場合でも、手動で解放する必要がある

私が今考えることができるのはそれだけです。ただし、私はいつでもドメインソケットを使用します。言うまでもなく、分散コンピューティングを行うために再実装するよりもはるかに簡単です。安全な設計が必要なため、共有メモリの速度向上は失われます。ただし、自分が何をしているかを正確に理解し、適切なカーネル呼び出しを使用すると、共有メモリを使用して高速化できます

70

速度に関して言えば、共有メモリは間違いなく勝者です。ソケットを使用すると、データのコピーが少なくとも2つあります(送信プロセスからカーネルバッファーへ、次にカーネルから受信プロセスへ)。共有メモリを使用すると、レイテンシはボックスのコア間のキャッシュ整合性アルゴリズムによってのみ制限されます。

ただし、Kornelが指摘しているように、独自の同期/信号方式を考え出す必要があるため、共有メモリの処理はより複雑であり、どのルートを使用するかによって遅延が追加される可能性があります。共有メモリでセマフォを確実に使用して(Linuxでは futex で実装)、競合しない場合のシステムコールを回避します。

13

どちらもプロセス間通信(IPC)メカニズムです。 UNIXドメインソケットは、異なるホスト間でTCPソケットが使用されるのと同様に、1つのホスト上のプロセス間の通信に使用されます。共有メモリ(SHM)は、データを配置してプロセス間で共有できるメモリの一部です。 SHMは、ポインターを使用してランダムアクセスを提供します。ソケットは書き込みまたは読み取りができますが、巻き戻しや位置決めはできません。

5
stacker