GNU/Linux >> Linux の 問題 >  >> Linux

プロセス間通信の推奨事項

D-Bus は非常に便利で、同じホストで ipc を実行するのに非常に安定しています。http://www.freedesktop.org/wiki/Software/dbus


これまで見てきたように、プロセス間通信に使用できます:

  • 共有メモリ
  • 名前付きパイプ
  • TCP/UDP ソケット (最終的にはローカルのもの)

メッセージの送受信時にバッファがないため、共有メモリにはパフォーマンスの利点があります。ただし、データ交換を別の IPC と同期する必要があります。それは、IPC セマフォまたは ... 名前付きパイプまたはソケットです。

パフォーマンスが主な目標ではない場合、私はソケットを好む傾向があります。ソケットの使い方が簡単で、コンピューター間通信に拡張できるからです。

最善の方法は、2 つのプロセスが同じコンピューター上にある場合は共有メモリを使用し、そうでない場合はソケットを使用できるクラスで通信を抽象化することです。次に、UDP と TCP のどちらかを選択する必要があります;-)

同期/バッファ交換には、より信頼性の高い TCP を優先してください。

私は名前付きパイプを使用しません。コンピューター間通信を使用する可能性のためにソケットを好むためです。もちろん、多くのポータブル ソケット ライブラリを見つけることができます...

私の2セント

編集:

同期の場合、共有メモリはおそらく最適なツールではありません。あなたの場合、コマンドを待機する各プロセス用のスペースを使用して、小さなメモリスペースを共有することで使用できます。着信コマンドをポーリングするか、共有セマフォを使用できます。最速の方法は、プロセスが名前付きセマフォを待機し、コマンド/パラメーター用の共有メモリ スペースを読み取ることです。名前付きパイプの使用は確かに簡単ですが、それほど高速ではありません。あなたは確かにそんなに速くする必要はありませんか?とにかく、交換プロトコルをモデル化するクラスでそれを抽象化し、2つの方法を試してください:-)


良い選択は、非常に高速で効率的な socketpair を使用することです。


Boost には、クロスプラットフォームで非常に直感的な優れた InterProcess ライブラリがあります。

私はそれをいじっただけなので、もっと良い代替案があるかもしれません.

ただし、共有メモリが本当に必要ない場合は、メッセージング アプローチを使用します。デッドロックや競合状態を回避できます。パイプの原理は非常に優れており、問題によっては処理を大幅に節約できる遅延動作も可能です!


Linux
  1. ノードの再起動後の /dev/shm 権限の変更

  2. Linuxで共有メモリセグメントに接続されているプロセスを一覧表示する方法は?

  3. Linux in C で共有メモリを使用する方法

  1. 共有メモリ IPC 用のファイルの使用

  2. Ubuntu 12.04 でカーネル共有メモリが 0 になるのはなぜですか?

  3. rkhunter:疑わしい共有メモリ セグメント

  1. Linuxでのプロセス間通信:ソケットとシグナル

  2. Linuxでのプロセス間通信:パイプとメッセージキューの使用

  3. Linuxでのプロセス間通信:共有ストレージ