pigz(Parallel Implementation of GZip)是gzip的并行实现版本,它能够利用多核处理器的优势,显著加快压缩和解压缩的速度。在当今多核CPU普及的环境下,pigz相比传统的gzip能够提供数倍的性能提升。
pigz的核心思想是将压缩任务分解成多个独立的块,然后在不同的处理器核心上并行处理这些块。其工作流程如下:
pigz [选项] [文件...]
参数 | 长参数 | 描述 |
---|---|---|
`-0` to `-9` | 压缩级别(0-9,数字越大压缩率越高但速度越慢) | |
-11 | 压缩级别11(使用zopfli算法,速度极慢但压缩率更高) | |
--fast | 快速压缩(相当于级别1) | |
--best | 最佳压缩(相当于级别9) | |
-b | --blocksize mmm | 设置压缩块大小为mmmK(默认128K) |
-c | --stdout | 将所有处理后的输出写入标准输出(不删除原文件) |
-d | --decompress | 解压缩模式 |
-f | --force | 强制覆盖文件,压缩.gz文件、链接和终端输出 |
-F | --first | 在块分割之前先进行迭代(仅用于-11级别) |
-h | --help | 显示帮助信息并退出 |
-i | --independent | 独立压缩块以便损坏恢复 |
-I | --iterations n | 为-11优化设置迭代次数 |
-J | --maxsplits n | 为-11设置最大分割块数 |
-k | --keep | 处理完成后不删除原文件 |
-K | --zip | 压缩为PKWare zip格式(.zip单条目格式) |
-l | --list | 列出压缩文件内容 |
-L | --license | 显示pigz许可证信息并退出 |
-m | --no-time | 不存储或恢复修改时间 |
-M | --time | 存储或恢复修改时间 |
-n | --no-name | 不存储或恢复文件名和修改时间 |
-N | --name | 存储或恢复文件名和修改时间 |
-O | --oneblock | 不分割为更小的块(仅用于-11级别) |
-p | --processes n | 允许最多n个压缩线程(默认为在线处理器数量,未指定时为8) |
-q | --quiet | 不打印任何消息,即使出错 |
-r | --recursive | 递归处理所有子目录内容 |
-R | --rsyncable | 为rsync设置输入确定的块位置 |
-S | --suffix .sss | 使用后缀.sss代替.gz(用于压缩) |
-t | --test | 测试压缩文件的完整性 |
-v | --verbose | 提供更详细的输出信息 |
-V | --version | 显示pigz版本信息 |
-Y | --synchronous | 强制输出文件写入永久存储 |
-z | --zlib | 压缩为zlib格式(.zz)而不是gzip格式 |
-- | 在"--"之后的所有参数都视为文件 |
# 压缩单个文件
pigz filename.txt
# 压缩并保留原文件
pigz -k filename.txt
# 指定压缩级别
pigz -9 largefile.iso
# 使用所有可用核心
pigz -p $(nproc) bigfile.tar
# 解压缩文件
pigz -d filename.txt.gz
# 解压缩并保留压缩文件
pigz -dk filename.txt.gz
# 结合tar进行目录压缩
tar cf - directory/ | pigz > directory.tar.gz
# 列出压缩文件信息
pigz -l archive.gz
# 测试压缩文件完整性
pigz -t archive.gz
# 递归压缩目录
pigz -r project_folder/
time gzip largefile.iso
time pigz -p8 largefile.iso
通过简单对比可以发现,对同一个文件进行压缩,pigz耗时为8.73秒,gzip耗时为20秒。如果是更大的文件,使用针对pigz优化后的任务执行参数,则这一差距会更大。
1.核心数量选择:
2. 压缩级别选择:
3. 内存考虑:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。