cp -R 和解压 tar.gz 文件哪个更快?

cp -R 和解压 tar.gz 文件哪个更快?

我在 CentOS 系统上有一些总计几 GB 的 tar.gz 文件。大多数 tar.gz 文件实际上都非常小,但带有图像的文件很大。一个是 7.7G,另一个大约是 4G,还有几个大约是 1G。

我已经解压过一次这些文件,现在我想要所有这些文件的第二份副本。

我以为复制解压后的文件会比重新解压它们更快。但我大约 10 分钟前开始运行 cp -R,到目前为止复制了不到 500M。我确信解压过程更快。

我对吗?

如果是的话,为什么?解包比简单地复制现有结构更快似乎没有意义。

答案1

请考虑以下两种情况:

  • 复制需要你从磁盘读取整个文件并将其写入磁盘
  • Tar-Gzip 要求您从磁盘读取一个较小的文件,解压缩,然后将其写入磁盘。

如果您的 CPU 没有因解压过程而负担过重,那么 I/O 操作是有限制的。根据这个论点(并且因为在两种情况下您必须写入相同量),读取较小的文件(tar.gz)比读取较大的文件花费的时间更少。此外,由于读取单个文件比读取许多小文件更快,因此节省了时间。

节省的时间取决于读取(I/O)和解压缩(CPU)所用时间之间的差异。因此,对于可压缩性最低的文件(例如已压缩的文件,如 mp3、jpg、zip 等),解压缩所需的时间可能大于读取操作所节省的时间,事实上解压缩比复制更慢。

(值得注意的是,I/O 越慢,使用压缩文件节省的时间就越多 - 如果复制操作的源和目标位于同一个物理磁盘上,就会出现这种情况。)

答案2

读取一个很小的文件比读取一堆大文件要快得多。即使 CPU 必须对其进行解压缩,通常也是如此。

相关内容