请问文件的解压速度主要取决于CPU还是硬盘?
2019-10-07

主流的机械硬盘速度大概在50-150MB/s之间,SSD大概是150-500MB/s,主流的CPU(带流水线)、内存的速度大概是硬盘速度的100~1000倍左右。

换句话说,如果一个解压算法,平均解压一个字节消耗的指令数如果少于100个,那么硬盘速度就很难赶上CPU速度了;如果平均解压一个字节消耗的指令数少于1000个,那么绝大多数机械硬盘很难赶上CPU速度。

所以,瓶颈在哪,主要看解压的过程中的CPU负担。通常情况下,zip的解压字典只有32K或者64K,解压的过程中并非每次都搜索完整的字典,所以zip默认配置下很难占满CPU,如果考虑到多核的话,每个核的负担可以更低,磁盘IO的负担会更重,瓶颈效果会更明显。

如果要让CPU成为瓶颈,需要调整一些压缩的策略,比如:

1. 字典要更大,查找速度会更慢,如果字典比内存还大就更好了(7zip最大可以配置1G的字典)。

2. 文件的信息熵要足够大,换句话说文件本身更难以压缩,比如已经被压缩过的视频文件,这样解压时查字典的负担会更重。

3. 解压到内存里,或者至少是SSD里。

4. 压缩的时候选择用AES-256加密一下。

5. 挑一个性能比较弱的CPU解压。满足以上条件的情况下,就可以让CPU成为瓶颈了。但这样的条件很难达到,因为满足以上条件,会让压缩的过程变得非常慢,比如7zip的LZMA2算法中,把字典配到1G,线程数16的情况下,压缩需要内存是88G左右,绝大多数PC的内存都不够用。

在超级计算机上压缩,到普通计算机上解压就有可能吃满CPU。对于通常情况下来说,解压文件瓶颈在硬盘,只有在一定特定的场景下,CPU才会成为瓶颈。

补充一点:如果解压的是零碎的小文件,速度没有参考价值。小文件的实际写入开销比文件实际大小要大的多。参考:解压缩的速度和什么有关?

- 计算机解压缩操作为什么不吃CPU - 计算机

大家都在看
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容!本站文章版权归原作者所有,内容为作者个人观点。本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权。