2016-11-10 19 views
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を出してくれるどのように迅速についてです、推測している

...

+0

'seq 100 | cat> a | cat a | sort 'は 'seq 100> a&sort a'と書くことができます。 – choroba

+0

2シグマ、何も特別なものはありません。 – MSalters

答えて

1

私は走りました私のマシンで同じテストが数回行われ、その結果は2種類の配管の間にほとんど違いが見られませんでした。私の勘違いは、068秒の違いは何も特別なものではなく、ちょうどバックグラウンドタスクのためです。

関連する問題