2016-11-10 76 views
0

我目前正在寫一個bash腳本,其中我使用了很多命名管道。我認爲這可能會造成一些開銷,與直接使用管道相比,但我認爲我沒有問題,我只想獲得一些統計數據,以確定我正在處理的是多少。因此,我跑了這兩個命令各50次,次寫下來,然後平均:在bash中命名管道比普通管道更快嗎?

time seq 1000000 | sort | head; 
time seq 1000000 | cat >a | cat a | sort | head; #a was created with mkfifo 

這不是實際的方式,我會使用命名管道

寫下的時候,我用這個命令:

for i in `seq 50`; do { time seq 1000000 | sort | head; } 2>&1 | grep real | cut -c8-12 >> normal_pipe; done 

令我驚訝的是,我發現這些結果:

普通管:
平均:1.712秒
STDDEV:0.0157秒

未命名管道:
平均:1.644秒
STDDEV:0.0339秒

我的問題,現在:

  • 爲什麼命名管道快?
  • 我的基準測試設置是否有缺陷?
  • 或者只是由於其他進程在後臺運行而產生差異?

我猜,因爲sort只能開工一旦所有的輸入(右?),這是關於管的速度有多快吐出來的是EOF ...

+0

'seq 100 |貓> a |貓a | sort'可以寫爲'seq 100> a&sort a'。 – choroba

+0

兩個西格瑪,沒什麼特別的。 – MSalters

回答

1

我跑了在我的機器上進行了幾次相同的測試,結果顯示兩種管道之間的差異很小。我的預感是.068秒的差異,沒什麼特別的,只是由於後臺任務,就像你說的。