7zip应用实践
2013-07-17 17:19:48 阿炯

7-zip是非常优秀的开源档案处理软件,本站有它的使用简略参考及详细参考。7z在默认的配置参数下,它也能很好地工作,本文将讨论在不同参数组合下的使用方法及效果。我们先看下有哪些压缩算法可供选择,在windows下有三种:lzma(2)、ppmd、bzip2,在linux下有zip、gzip、bzip2、7z、lzma(2)、ppmd、bcj2、xz,其实7z算法格式与lzma在本质上并没有区别。

LZMA是目前最优秀的压缩算法之一,在使用这一算法进行压缩时,即使用最快的Fastest模式也能达到RAR Best级别的压缩率。与其它两款软件相比,7-Zip可以在更短的时间内实现相同的压缩率,或在相同的时间内实现更低的压缩率。很可惜的是,目前7-Zip LZMA只能利用最多两个CPU线程,所以CPU使用率均未超过25%。

新版7-Zip增加了一种压缩算法LZMA2,是LZMA的改进版,那 LZMA2究竟进行了哪些改进?
LZMA2与LZMA的压缩率基本相同,差距可以忽略不计。LZMA2与LZMA相比速度得到了很大的提升,最大幅度达358%,究竟是什么导致了这么大的性能提升?

原来是因为LZMA2的CPU利用率提高了很多,测试中甚至出现100%满载的情况。7-Zip提供线程数选择功能,当使用LZMA算法时最高只能选择2 个线程,而使用LZMA2算法最高可以选择16个线程。

PPMd也是7-Zip内置的一种算法,但最高只能执行一个线程。
PPMd算法的压缩率还行,但仍然不及强大的LZMA/2。速度相对慢,这与对多线程支持不好有直接的关系。

bzip2是一个基于Burrows-Wheeler变换的无损压缩算法,压缩效果比传统的LZ77/LZ78压缩算法来得好。它广泛存在于UNIX&LINUX的许多发行版本中。bzip2能够进行高质量的数据压缩,它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高。

bzip2的压缩速度较慢,其对于多线程处理的良好支持,cpu利用率在所有算法中最高,相对来讲PPMd算法对CPU的利用率较低。

以上都是从理论的技术分析,但在实际的使用过程中,情况又会如何呢。下面我们来做一简单示例:

在debian 6.0 32bit的系统,对perldoc-html-5.18.tar.gz的文档进行打包压缩处理,通过系统的'time'指令来计时,通过top取得其内存、cpu用量。指令示例如下:
$ time 7za a -m0=algorithm -mx=8 perldoc-html-5.18.algorithm perldoc-html-5.18/

algorithm--time(s)--mem(high MB)--cpu(%)--ratio(% vs tar.gz)
lzma--43--356--98%--177
bzip2--46--11--99%--148
ppmd--10--68--97%--183

lzma随着时间的推移,内存用量会不断增加到较大的用量,在小内存机器上表现较差,当然可以设置其内存用量来限制其行为。而ppmd会到一定量后不会对内存进一步申请,bzip2会一直用定量的小内存。