命名管道的作者什么时候开始工作?

时间:2014-07-28 23:05:43

标签: linux named-pipes

我试图理解命名管道在性能方面的表现。假设我有一个大文件,我正在解压缩,我想写一个命名管道(/ tmp / data):

gzip --stdout -d data.gz > /tmp/data

然后我稍后运行一个从管道中读取的程序:

wc -l /tmp/data

gzip什么时候实际解压缩数据,当我运行第一个命令时,或者当我运行第二个命令并且读取器连接到管道时?如果是前者,是将数据存储在磁盘上还是存储在内存中?

1 个答案:

答案 0 :(得分:1)

管道(命名或其他)只有一个非常小的缓冲区(如果有的话) - 所以如果什么都没有读,那么就不会写任何东西(或很少)。

在您的示例中,gzipwc运行之前会做很少的事情,因为在此之前,它编写输出的努力将会阻止。开箱即用的磁盘或内存中没有非平凡的缓冲区,但是如果你想要的话,存在可以为你实现这种缓冲的工具 - 请参阅pv及其{{1}参数,或不再维护的(并且,可悲的是,removed from Debian by folks who didn't understand its function bfr