执行相同操作的命令之间的性能差异

执行相同操作的命令之间的性能差异

有什么不同?它的执行方式相同吗?

tar -czf files/compressed/gzip/archive.tar.gz -C files/original .

tar -c -C files/original . | gzip -1 > files/compressed/gzip/archive.tar.gz

答案1

让我们做一些测试。

tar独自的:

time sh -c 'tar -czf test.tar.gz ~/Downloads'
tar: Removing leading `/' from member names
=====
JOB sh -c 'tar -czf test.tar.gz ~/Downloads'
74%    cpu
30.02s real
20.64s user
1.82s sys

tar管道到gzip

time sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
tar: Removing leading `/' from member names
=====
JOB sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
65%    cpu
27.23s real
16.07s user
1.88s sys

对我来说,tar管道gzip可以更快是合理的,因为它们是在多核机器上并行运行的(我的有 2 个 CPU)。

答案2

在前者中,tar 的实现使用 gzip 库来执行压缩本身。在后者中,tar 的输出通过管道传输到执行压缩的单独可执行文件中。前者可能稍微更高效,因为它不涉及额外的系统调用来向管道写入数据或从管道读取数据,但人们可能不会注意到其中的差异。

答案3

在第二个选项中,有 2 个应用程序需要启动(targzip)。这需要额外的时间。管道也需要额外的资源。这会导致执行时间更长。

相关内容