修改自:
Linux 下用得最普遍的两种压缩文件格式就是 .gz 和 .bz2 了,分别由 gzip 和 bzip2 命令创建。
说到压缩文件,除了压缩率之外,压缩和解压的速度也很关键,在创建或解压比较大的压缩文件时,如果时间过久,也挺郁闷的……
虽然多核 CPU 在这两年已经大面积普及了,但是标准的 gzip 和 bzip2 程序在压缩和解压的时候,只能用到 CPU 的其中一个核心,如果全部核心同时开动,一定可以大大加速压缩和解压的过程,于是,gzip 和 bzip2 的多核版: 和 就横空出世了~
mgzip 可以在压缩的时候充分利用多核,pbzip2 在压缩和解压的时候都可以充分利用多核。用 mgzip 压缩的压缩包,也可以通过标准的 gunzip 解压。pbzip2 只有在解压 pbzip2 创建的压缩文件时,才能利用多核。
mgzip 和 pbzip2 的用法和原来基本相同,只有一点小的差别,比如 mgzip 没有 --recursive 参数。
当然,为了获得多核速度上的提升,压缩文件也要记录一些额外的信息,导致文件要比标准的 gzip 和 bzip2 压缩后的文件要大一些,mgzip 和 gzip 的压缩结果就差不少,相比之下,pbzip2 和 bzip2 之间的差异要小很多,完全可以忽略:
$ bunzip2 linux-2.6.23.tar.bz2
$ gzip -c linux-2.6.23.tar > linux-2.6.23.tar.gzip
$ mgzip -c linux-2.6.23.tar > linux-2.6.23.tar.mgzip
$ ls -lh
-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben 56M 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben 67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip
$ gunzip -c linux-2.6.23.tar.mgzip > linux-2.6.23.tar.mgzip-gunzip
$ md5sum linux-2.6.23.tar.mgzip-gunzip linux-2.6.23.tar
853c87de6fe51e57a0b10eb4dbb12113 linux-2.6.23.tar.mgzip-gunzip
853c87de6fe51e57a0b10eb4dbb12113 linux-2.6.23.tar
$ bzip2 -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.bzip2
$ pbzip2 -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.pbzip2
$ ls -lh
-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben 56M 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben 67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip
-rw-rw-r-- 1 ben ben 44M 2008-01-19 19:03 linux-2.6.23.tar.bzip2
-rw-rw-r-- 1 ben ben 44M 2008-01-19 19:01 linux-2.6.23.tar.pbzip2
$ ls -l
-rw-r----- 1 ben ben 264704000 2008-01-19 18:55 linux-2.6.23.tar
-rw-rw-r-- 1 ben ben 45488158 2008-01-19 19:03 linux-2.6.23.tar.bzip2
-rw-rw-r-- 1 ben ben 57928789 2008-01-19 18:57 linux-2.6.23.tar.gzip
-rw-rw-r-- 1 ben ben 69968799 2008-01-19 18:57 linux-2.6.23.tar.mgzip
-rw-rw-r-- 1 ben ben 45695449 2008-01-19 19:01 linux-2.6.23.tar.pbzip2
不过,pbzip2 有个缺点,就是不能从标准输入来获取数据,所以要想作出一个 .tar.pbzip2 的文件,得先创建一个 .tar 文件才行,不过相信再今后的版本中,肯定能实现这个功能。
家里的电脑连超线程都不是,没法测试了,偷懒拿来现成的测试结果图( CPU 为 四核 Q6600 2.4G,测试文件为 linux-2.6.23 内核源代码包 ) :
可以看出,在高压缩比的情况下,多核版和单核版的压缩文件结果差异会变小,并且不管压缩比是大是小,多核版都能大幅度提高压缩的时间 ( 四核情况下,快了 3 倍 )~
同样,解压缩的时间也大幅缩短: