电脑必备
Win解压缩和7-Zip解压同一个20G部署包,我盯着CPU和磁盘看了半天,发现瓶颈根本不在软件
81 0 13
先说结论:解压速度这事儿,软件之间的差距远没有我原先想的大,真正卡脖子的是磁盘和压缩包结构。
测试环境
- 机器A:i7-12700 / 32G / 三星980 Pro 1T
- 机器B:i5-10400 / 16G / 西数SN550 500G
- 包:一个20.3G的部署包,内部大概12万个文件,固实压缩
- 软件:Win解压缩 6.5.1,7-Zip 23.01 x64
实测数据(秒表掐的,每项跑3次取中位数)
| 机器 | 软件 | 解压耗时 | CPU峰值 | 磁盘读峰值 |
|---|---|---|---|---|
| A | Win解压缩 | 4分12秒 | 62% | 480MB/s |
| A | 7-Zip | 4分28秒 | 58% | 470MB/s |
| B | Win解压缩 | 6分51秒 | 71% | 310MB/s |
| B | 7-Zip | 7分05秒 | 69% | 300MB/s |
两个软件差距在5%以内,基本可以认为是误差范围。但两台机器之间的差距接近60%,这个才是大头。
关键发现
- 解压时CPU根本没跑满,说明不是计算瓶颈。我拿资源监视器盯着看,磁盘队列长度一直在2以上,瓶颈在IO。
- 小文件太多是原罪。12万个文件平均每个不到200K,解压时大量时间花在建目录、写元数据上。我把包用7-Zip重新打包成不固实、按目录分卷的,解压时间直接降到3分20秒,降了20%。
- Win解压缩的多线程默认是自动,在机器A上开了8线程,机器B上开了4线程。7-Zip手动设成一样的线程数后,差距进一步缩小到2%。
命令行这块还是要说清楚
Win解压缩有命令行,但参数少得可怜,不支持通配符批量解压,不支持指定输出目录结构,退出码也不规范。我写脚本批量处理日志包的时候,只能老老实实用7-Zip的 7z x -o 加 -r 递归。日常手动解压部署包,Win解压缩的右键菜单确实快,一步到位;但一旦进到自动化流程,7-Zip还是绕不开。
给同行的建议
- 单个大包手动解压:Win解压缩够用,速度不输
- 批量脚本处理:7-Zip,没得选
- 如果解压特别慢,先看文件数量和磁盘类型,别急着换软件
最后问一句:你们解压那种几十G、里面几十万个小文件的包,有没有试过先转成tar再解?我还没测这个,想听听有没有人踩过坑。
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
