代码之家  ›  专栏  ›  技术社区  ›  wjimenez5271

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

  •  0
  • wjimenez5271  · 技术社区  · 12 年前

    我试图了解命名管道在性能方面的行为。假设我有一个正在解压缩的大文件,我想将其写入命名管道(/tmp/data):

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

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

    wc -l /tmp/data
    

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

    1 回复  |  直到 12 年前
        1
  •  1
  •   Charles Duffy    12 年前

    管道(命名或其他)只有一个非常小的缓冲区(如果有的话),所以如果没有读取任何内容,那么就不能写入任何内容(或者很少)。

    在您的示例中, gzip 直到 wc 因为在此之前,它写输出的努力将受阻。磁盘或内存中都没有现成的非平凡缓冲区,尽管有一些工具可以为您实现这样的缓冲区,如果您需要的话——请参见 pv 用它 -B 争论,或不再维持(而且,可悲的是, removed from Debian by folks who didn't understand its function ) bfr公司 .