pigz加速压缩
背景
在mac和自己电脑之间传文件,偶然发现tar调用的gzip是单线程,比较慢.
于是找找替代方案,找到了pigz
一些知识
tar
原本的功能是打包,将一堆文件合并成一个文件.
比较受欢迎的 gzip
, bzip2
等压缩程序原本只能压缩一个文件.
因此如果要将一堆文件压缩起来,
通常的做法是使用 tar
将这些文件打包成 .tar
文件
然后用各种压缩工具来压缩.
因此出现了各种格式
- tar.gz 或者 tgz (gzip)
- tar.bz2 (bzip2)
- tar.xz (xz)
- tar.Z (compress)
tar指定压缩程序
1 | tar -cf temp.tar temp/ # 不压缩 |
大多数文档将pigz视为多线程的gzip,压缩文件的后缀也使用 gz
另外的压缩方式
1 | tar -cf - temp/ | pigz -p 4 > temp.tar.gz |
- pigz可以使用p来指定使用的线程数,默认是电脑的全核心,如果无法获取核心数量,使用8
如果对使用的核心数有特别的要求,可以使用该方式 - pigz解压tar.gz文件只能得到tar文件,还需要用
tar -xf temp.tar
来进一步解压
性能相关
压缩时相比使用gzip,更能使用CPU性能,因此时间也会大幅降低,比如4核则变为1/4时间,
4核以上效果不明显,不过默认全核就好.
gzip本身解压就比压缩快,压缩90秒,解压可能16s左右.即使使用pigz也看不出特别大的差别.
相比gzip,bzip2有时能实现近一半的大小,但耗时也是成倍增长.
因此个人认为gzip是一个空间与时间的很好的折衷.
其他
其实bzip2也有多线程的实现,
有名的有 pbzip2
, lbzip2
不过貌似 lbzip2
更快