【问题标题】:When does the writer of a named pipe do its work?命名管道的作者什么时候做它的工作?
【发布时间】:2014-07-28 23:05:43
【问题描述】:

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

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

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

wc -l /tmp/data

gzip 何时真正解压缩数据,当我运行第一个命令时,或者当我运行第二个命令并且阅读器连接到管道时?如果是前者,数据是存储在磁盘还是内存中?

【问题讨论】:

  • 不应该是gunzip解压吗?
  • 认为它是有效的。从手册页:` "-d, --decompress, --uncompress。此选项选择解压缩而不是压缩。"`

标签: linux named-pipes


【解决方案1】:

管道(已命名或以其他方式命名)只有一个非常小的缓冲区(如果有)——因此,如果没有读取内容,则无法写入任何内容(或很少写入)。

在您的示例中,gzip 在运行 wc 之前几乎不会做任何事情,因为在此之前它写入输出的努力将被阻塞。开箱即用的磁盘上或内存中都没有非平凡的缓冲区,尽管存在可以为您实现这样一个缓冲区的工具,如果您想要一个 - 请参阅 pv 及其 -B 参数,或不再维护的(遗憾的是,removed from Debian by folks who didn't understand its functionbfr

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多