2012-02-16 13 views

答えて

6

パイプと比較すると、IPCソケットは双方向で異なるため、同じディスクリプタで読み書きを行うことができます。パイプはソケットとは異なり、単方向です。読み書きの両方を行う場合は、ディスクリプタのペアを保持する必要があります。

パイプは、一定量のバイトで読み書きするときには、アトミック性を保証します。 PIPE_BUFバイト未満を一度に書き込むことは、1つのチャンクで配信されることが保証され、部分的には見られません。ソケットは、その点でプログラマからもっと注意が必要です。

共有メモリは、IPCで使用する場合、プログラマからの明示的な同期が必要です。これは最も効率的で柔軟性の高いメカニズムかもしれませんが、それは複雑なコストがかかります。

+0

IPCソケットのブロックされていない利点がありますか? – jasonkim

0

真のメッセージキューを使用すると、固定サイズのメッセージを残す傾向があります。大きく変化するサイズのメッセージが多数ある場合、これはパフォーマンス上の問題になります。ソケットを使用すると、この機能をラップしてキューと同じになるようにしておくことができますが、細部を正しく理解するのは難しく、特にブロッキング/ノンブロッキングやアトミック性などの面があります。

共有メモリは高速ですが、管理が必要です(SHMを管理するにはmallocのバージョンが作成されます)。何らかの方法で同期してロックする必要があります。ライブラリを使用してこれを支援することはできますが、可用性は環境と言語によって異なります。

キューは簡単ですが、私のソケットディスカッションの賛否両論が記載されています。

パイプは、この質問に対するBlagovestsの回答によってカバーされています。

IPCとソケットに関するW. Richard Stevensの書籍を読むことをお勧めします。彼よりも良い説明はありません! :-)

1

これはあまりに単純すぎる答えですが、それは重要な詳細です。ソケットはすべてのOSでサポートされていません。最近、私はIPC用のソケットを全面的に使って、LinuxからPOSIXの独自のOSに変更されただけで、Linuxと同じようにソケットをサポートしていないことを知ったプロジェクトを知っています。

1

ソケットを使用する別のポイント:ソケットを使用するアプリケーションは、簡単に配布できます。 1つのホスト上で実行することも、いくつかのホストに分散させることもできます。もちろん、これはアプリの性質に依存します。

1

ソケットはあなたが(応答を参照してください、データを手動で入力)テストのためにそれらにシンプルなクライアントを接続することができます

  • ...あなたにいくつかの利点を可能にします。 これはデバッグ、シミュレート、ブラックボックステストに非常に役立ちます。

  • 異なるマシンでプロセスを実行できます。これはスケーラビリティに役立つ可能性があり、組み込みソフトウェアで作業する場合、デバッグ/テストに非常に役立ちます。

  • それはサービス

として、あなたのプロセスを公開することは非常に容易になる。しかし欠点は

  • オーバーヘッドは、単一のマシン用に最適化されたIPCよりも大きい場合にもあります。パフォーマンスが必要な場合は特に共有メモリーが優れており、プロセスがすべて同じマシン上にあることがわかります。

  • セキュリティ - クライアントアプリケーションが接続できる場合は、認証に注意しない場合は他の誰でもアクセスできます。データを暗号化していない場合はスニッフィングでき、少なくともワイヤを介して送信されたデータに署名していない場合は変更できます。

関連する問題