共同プロセスを開始し、その標準入力と出力を基本プロセスに接続したいとします。 2つのオプションがあります。
2つのパイプを呼び出し
pipe(2)
て生成し、それぞれcoprocessの標準入力と出力に接続します。socketpair(2)
ソケットの端1を呼び出して、coprocessの標準入力と出力に接続します。
今日、多くのシステムが実行している「ソケットペア」よりも単純なパイプをより効率的に実装できることが知られています。しかし、双方向で動作するにはどうすればよいですか? 「パイプペア」はまだソケットペアよりも効率的ですか?
コンテキスト
標準に準拠したコードを書くために最善を尽くしたいので、ターゲットプラットフォームは「POSIX-in-general」と仮定します。私は、この質問は、Linux、{Free、Net、Open}BSD、Solaris 11.4などの一部のSVR4子孫などを含む、主要な実装に展開されている2種類のIPCの一般的な実装技術を比較することです。
また、コストが高いということは、IOスループットだけを意味するものではありません。システムリソース消費も私の興味です。
答え1
移植性が必要な場合は、2つ以上のパイプラインを作成する必要があります。これは、ソケットの場合、1つのオープンファイル記述と比較して2つのオープンファイル記述に対応します。
パフォーマンス/効率性の理由ではありませんが、MSG_PEEK
パイプと一緒には使用できませんが、匿名ソケットと一緒に使用できますsocketpair(2)
。