パイプ (コンピュータ)
さらに、逐次処理を行うため、データのサイズが大きい場合でも記憶領域を消費しない利点もある。また、データの受け渡しがメモリ上で行われるため、その点でも高速な処理が期待できる。
また、上記例はパイプや中間ファイルを利用する方法以外にも、プログラミング言語を利用して専用のソフトウエアを作成し処理する方法もある。しかしながら、パイプを利用すれば既存のUNIXコマンドのみで素早く実現したい処理を実現できる。特に一度しか実行しないような処理に対して専用のソフトウエアを作成するのは過剰であり、生産性の面でもパイプは優れている。
UNIXの設計思想である、それぞれの役割に特化したプログラムを組み合わせ、複雑な機能を実現する(ツールキットアプローチ、分割統治法)として、パイプはその成功例であり、UNIXを利用する魅力のひとつである。
netcatなどのツールを使えば、パイプをTCP/IPソケットに接続できる。
Windowsでは、名前付きパイプを作成するサーバ側は、CreateNamedPipe() で「\\.\pipe\パイプ名」という形式の名前で作成すれば、パイプにつなぐクライアント側からファイルの読み書きと同じ操作で読み書きすることができる。また、Windows における匿名パイプは、ランダムな名前の名前付きパイプとして実装されている。
マシン間の通信にも名前付きパイプを利用することができるが、データを送るたびに、通信確認のためのデータが行き来するので、他のマシンと大量のデータを通信するときは、ソケットの方が高速である。ただし、マシン内のプロセス間通信の場合は、Windowsではカーネル内で動作するので名前付きパイプは高速である。
通常、OSはパイプのバッファリング機能を提供する。例えば、あるプロセスが毎秒5000バイトのデータをパイプに送り込み、受け取る側のプロセスが毎秒100バイトしか処理できないとする。それでもデータは失われない。実際にはカーネル内で送信側プログラムの出力がキューに保持され、受信側プログラムがデータ読み取り可能となったとき、カーネルがキューからデータを送り、キュー上で送信済みとなったデータを削除する。キューの容量上限までデータが溜まると、受信側が溜まったデータを受信するまで、送信側プロセスは送信でブロックされる。Linuxではこのバッファの大きさは65,536バイトとなっている。