同じタスクを実行するコマンド間のパフォーマンスの違い

同じタスクを実行するコマンド間のパフォーマンスの違い

違いは何ですか?同じように行われますか?

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

パイプラインはマルチコアシステム(私のCPUは2つ)で並列に実行されるため、tarパイプラインが高速になることがわかります。gzip

答え2

前者の場合、tarの実装はgzipライブラリを使用して圧縮自体を実行します。後者の場合、tarの出力は圧縮を実行する別々の実行可能ファイルにパイプされます。前者はパイプにデータを書き込んだり、パイプからデータを読み取ったりする追加のシステムコールを含まないため、少し効率的ですが、人々はおそらく違いを感じません。

答え3

2番目のオプションには、実行する必要がある2つのアプリケーションがあります(tarおよびgzip)。これには追加の時間が必要です。パイプラインには追加のリソースも必要です。これにより実行時間が長くなります。

関連情報