这个问题是关于解压的性能,而不是“如何”解压。几天前,当我开始在我相当强大的 Windows 10 机器上提取几个 .tar.gz(现在将它们称为档案)时,我注意到了这一点。解压一个 25 GB 的档案花了整整一天多的时间。内容主要是一些 2 位 KB 大小的 mp3 音频文件,所以我有很多文件需要解压。我的 Windows 机器配备了一个新的 i7 处理器、16 GB 的 RAM,我正在从 1TB NVMe 解压到通过 USB-C 连接的外部 500 GB SSD,这通常非常快。
出于好奇,我尝试在 MacBook 上解压同一个档案,它的配置较小(较旧的 i5 处理器、16 GB RAM 和 500 GB 内部 NVMe)。出于某种原因,解压只花了大约 45 分钟。我对这种巨大的差异感到震惊,老实说,我无法想出任何解释。在网上搜索时,人们说这可能是由较慢的硬盘引起的(这在我的情况下可能不是真的,我尝试在 Windows 上从我的内部 NVMe 解压到它自己,这也非常慢)。
如何解释这种巨大的差异?我怀疑这与文件系统有关,但我无法理解。
答案1
似乎每当程序发出“关闭”调用时,Windows Defender 就会扫描每个新文件——这种情况会发生同步地,也就是说,在 Defender 完成扫描之前,调用不会返回,线程也不会继续。去年在 Linux.conf.au 演讲中讨论过这个问题:
文件系统和操作系统内核设计也可能是一个因素;由于每个新文件都需要写入元数据并更新目录元数据,因此操作延迟比原始磁盘吞吐量更重要。(例如,在写入大文件时,操作系统可以一次发出一堆写入,稍后收集结果;但元数据更新可能涉及阅读一些数据和等待等待读取完成,然后才能写回。)