gzip 和管道输出(性能考虑)

gzip and pipe to output (performance consideration)

q1) 我可以检查一下我是否做了一个 gzip -c 文件 |加密(一些参数)

a) gzip 是否逐行打印输出并将其通过管道传递给加密函数或

b) gzip 将首先执行,然后输出将立即通过管道传输到加密函数?

============================================= =======

q2) 将执行 gzip | encrypt 比 gzip 有更好的性能考虑,然后是 encrypt

此致, 菜鸟

Gzip 是一种流媒体 compressor/decompressor。因此(对于足够大的输入)compressor/decompressor 在看到整个输入之前开始写入输出。

这就是将 gzip 压缩用于 HTTP 压缩的原因之一。发送方可以在仍在生成内容时进行压缩;收件人可以解压缩内容的第一部分,同时仍能收到其余部分。

Gzip 不起作用 "line-by-line",因为它不知道一行是什么。但它确实有效 "chunk-by-chunk",其中压缩器定义块的大小。

"Performance" 这个词太模糊,而且这个领域太复杂,无法给出是或否的答案。

使用 gzip -c file | encrypt,对于足够大的文件,将看到 encryptgzip 同时工作。也就是说,encrypt 将在 加密第一个压缩块之前 gzip 压缩文件的最后一个块。

管道缓冲区的大小取决于实现。在 SunOS 下,它是 4kB。即:gunzip < file.gz | encrypt 将移动 4k 个块。同样,这取决于 OS。 CygWIN 的行为可能完全不同。

我应该补充一点,这是在 man 7 pipe 中。搜索 PIPE_BUF.