我目前正在编写一个bash脚本,其中我使用了很多命名管道。我认为与直接使用管道相比,这可能会产生一些开销,但我认为我没关系,我只是想得到一些统计数据来找出我处理的确切程度。 。因此,我每次运行这两个命令50次,记下时间平均值:
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 :(得分:1)
我在我的机器上运行了几次相同的测试,结果显示两种类型的管道之间几乎没有差别。我的预感是差异.068秒没什么特别的,只是由于后台任务,就像你说的那样。