为什么 tar|tar 比 cp 快这么多?

为什么 tar|tar 比 cp 快这么多?

对于递归复制目录,使用tar打包一个目录,然后将输出通过管道传输到另一个目录tar进行解包似乎比使用cp -r(或cp -a)要快得多。

这是为什么?为什么不能通过cp在后台以同样的方式执行来加快速度?

编辑:当我尝试复制包含数万个文件和文件夹的大型目录结构时,我注意到了这种差异,这些文件和文件夹嵌套很深,但总大小只有约 50MB。不确定这是否相关。

答案1

Cp在所有文件上循环执行打开-读取-关闭-打开-写入-关闭。因此,从一个位置读取和写入另一个位置完全交错进行。Tar|tar在单独的进程中执行读取和写入,此外还tar使用多个线程“同时”读取(和写入)多个文件,从而有效地允许磁盘控制器同时获取、缓冲和存储许多数据块。总而言之,tar允许每个组件高效工作,同时cp将问题分解为不同的、低效的小块。

答案2

您的编辑朝着好的方向发展:cp并不一定比 慢tar | tar。取决于文件的数量和大小。对于大文件,plaincp是最好的,因为它只是简单地推送数据。对于许多小文件,物流是不同的,tar可能会做得更好。例如,参见这个答案

相关内容