![执行相同操作的命令之间的性能差异](https://linux22.com/image/70022/%E6%89%A7%E8%A1%8C%E7%9B%B8%E5%90%8C%E6%93%8D%E4%BD%9C%E7%9A%84%E5%91%BD%E4%BB%A4%E4%B9%8B%E9%97%B4%E7%9A%84%E6%80%A7%E8%83%BD%E5%B7%AE%E5%BC%82.png)
有什么不同?它的执行方式相同吗?
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 个应用程序需要启动(tar
和gzip
)。这需要额外的时间。管道也需要额外的资源。这会导致执行时间更长。