文件归类于:“意想不到的高效部门”。
前9000万个数字占用大约761MB,由以下输出:
seq 90000000
根据 man parallel
,它可以通过将输入分块并使用不同的 CPU 来压缩这些块来加速 gzip
压缩大文件的速度。因此,即使 gzip
是单线程的,这种技术使其变成了多线程:
seq 90000000 | parallel --pipe --recend '' -k gzip -9 >bigfile.gz
在一台Intel Core i3-2330M (4) @ 2.2GHz的电脑上,花费了46秒。
将其传输到普通的gzip
:
seq 90000000 | gzip -9 > bigfile2.gz
在同一台CPU上,只需要80秒。现在惊喜来了:
ls -log bigfile*.gz
输出:
-rw-rw-r-- 1 200016306 Jul 3 17:27 bigfile.gz
-rw-rw-r-- 1 200381681 Jul 3 17:30 bigfile2.gz
文件大小增加了300K?这看起来不对。首先,我用zdiff
检查了文件是否具有相同的内容-是的,相同的。我本来以为任何压缩器都能比分块的数据流更好地处理连续的数据流。为什么bigfile2.gz
没有比bigfile.gz
更小呢?
bigfile2.gz
文件大小几乎相同,经过的时间也几乎相同。 - Mark Setchellseq
命令无法产生相同的输出。您可以尝试使用jot
命令代替。 - Mark Adler