共有メモリ(または代替のメモリマップファイル)と比較して、UNIXドメインソケットの速度はだれかわかりますか?
ありがとう。
速度(共有メモリが速いが速い)よりもデザインの問題であり、ドメインソケットは間違いなくUNIXスタイルであり、問題ははるかに少なくなります。選択に関しては、事前に知っておいてください。
ドメインソケットの利点
ドメインソケットの欠点
共有メモリの利点
共有メモリの欠点
私が今考えることができるのはそれだけです。ただし、私はいつでもドメインソケットを使用します。言うまでもなく、分散コンピューティングを行うために再実装するよりもはるかに簡単です。安全な設計が必要なため、共有メモリの速度向上は失われます。ただし、自分が何をしているかを正確に理解し、適切なカーネル呼び出しを使用すると、共有メモリを使用して高速化できます。
速度に関して言えば、共有メモリは間違いなく勝者です。ソケットを使用すると、データのコピーが少なくとも2つあります(送信プロセスからカーネルバッファーへ、次にカーネルから受信プロセスへ)。共有メモリを使用すると、レイテンシはボックスのコア間のキャッシュ整合性アルゴリズムによってのみ制限されます。
ただし、Kornelが指摘しているように、独自の同期/信号方式を考え出す必要があるため、共有メモリの処理はより複雑であり、どのルートを使用するかによって遅延が追加される可能性があります。共有メモリでセマフォを確実に使用して(Linuxでは futex で実装)、競合しない場合のシステムコールを回避します。
どちらもプロセス間通信(IPC)メカニズムです。 UNIXドメインソケットは、異なるホスト間でTCPソケットが使用されるのと同様に、1つのホスト上のプロセス間の通信に使用されます。共有メモリ(SHM)は、データを配置してプロセス間で共有できるメモリの一部です。 SHMは、ポインターを使用してランダムアクセスを提供します。ソケットは書き込みまたは読み取りができますが、巻き戻しや位置決めはできません。