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 ...
'seq 100 |貓> a |貓a | sort'可以寫爲'seq 100> a&sort a'。 – choroba
兩個西格瑪,沒什麼特別的。 – MSalters