私が言うとき、私はsedがブロックしていないという印象を持っていました:
iostat | sed
sed到着時にデータを処理しますが、
iostat | sed | netcat
次にsedブロックしnetcatます。
私は正しいですか?
sed端末に出力しない場合は、バッファ モードで動作します。これは、デフォルトで処理と出力を行う前に内部バッファを埋めようとすることを意味します。
これは、スループットを向上させるために行われます。通常、パイプではタイミングは気にしませんが、特定の時間内にできるだけ多くのデータを処理したいからです。
sed に渡す-uと、バッファなしで動作するように指示されるため、出力が端末に送られるときと同じように動作します。
@sauaが言うことに加えて、sed少なくとも行指向であり、行を読み取ってから操作するため、常に少なくとも1行をバッファリングします。さらに、sed複数行モードで作業できます。複数行のパターンを使用しているsed場合、パターンが適用されないか、パターンが処理されていることがわかるまで、現在のバッファーを出力できません。
質問を正しく理解しているかどうかはわかりませんが、あなたの例では次のようになります。
それ以外では、sed は出力を生成するためにすべての入力を読み取る必要はありません。
これといくつかの小さなバッファリングでは説明できない遅延が見られますか?