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