0
私は現在、多くの名前付きパイプを使用しているbashスクリプトを作成しています。パイプを直接使用するのと比べてオーバーヘッドが発生するかもしれないと思っていましたが、私はそれで大丈夫だと判断しました。ちょうど私がどのくらい正確に対処しているかを知るための統計を取得したかったのです。従って私は、その後の平均に時間を書き留め、これら二つのコマンドを50回ずつ走った:名前付きパイプがbashの通常のパイプより高速ですか?
time seq 1000000 | sort | head;
time seq 1000000 | cat >a | cat a | sort | head; #a was created with mkfifo
これは私が時間を書き留めて名前付きパイプ
を使用することがあります実際の方法ではありませんが、私が使用しこのコマンド:
ノーマルパイプ:
平均:1.712秒私の驚きに
for i in `seq 50`; do { time seq 1000000 | sort | head; } 2>&1 | grep real | cut -c8-12 >> normal_pipe; done
は、私はこれらの結果を発見しました
STDDEV:0.0157秒
名前パイプ:
平均:1.644秒
STDDEV:0.0339秒
私の質問は今:
- なぜ名前付きパイプが速いのですか?
- 私のベンチマーク設定に欠陥がありますか?
- これは、おそらく他のプロセスがバックグラウンドで実行されているためですか?私はそれがすべての入力をいったん
sort
のみ作業を開始することができますので、(右?)、これはパイプがEOFを出してくれるどのように迅速についてです、推測している
...
'seq 100 | cat> a | cat a | sort 'は 'seq 100> a&sort a'と書くことができます。 – choroba
2シグマ、何も特別なものはありません。 – MSalters