gzip *.txt と gzip test.txt & gzip test2.txt &

gzip *.txt と gzip test.txt & gzip test2.txt &

gzipプロセスをスピードアップしたいです。 (サーバーはAIX 7.1です。)

具体的には、現在の実装をgzip *.txt完了するのに最大1時間かかります。 (抽出されたファイルは大容量、合計10個のファイルです)

Q:ランニングがより効率的ですか?

pids=""
gzip file1.txt &
pids+=" $!"
gzip file2.txt &
pids+=" $!"
wait $pids

比較する

gzip *.txt 

並列性、CPU消費などの面でgzip *txtバックグラウンド(&)でgzipと同じように動作しますか、それとも他のオプションがより効率的ですか?

答え1

ホイールを再発明しないでください。を使用できpigz、並列実装は配布gzipリポジトリに配置する必要があります。そうでない場合は、次のように開始できます。ここ

インストールされたら、pigz次のように使用しますgzip

pigz *txt

以下を使用して生成された5つの30Mファイルに対してこれをテストしましたfor i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done

## Non-parallel gzip
$ time gzip *txt
real    0m8.853s
user    0m8.607s
sys     0m0.243s

## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)

real    0m2.214s
user    0m10.230s
sys     0m0.250s

## pigz
$ time pigz *txt

real    0m1.689s
user    0m11.580s
sys     0m0.317s

答え2

唯一の実際の方法は時間を合わせることです。gzip *.txt別のファイルなので、一度に1つずつ実行したいと思います。

並列に実行(gzip file1.txtなどを使用して)可能より高速ですが、メモリ量、CPUコア数などによって異なります。最も重要なのは、これを実行している間にディスク競合が発生して速度が遅くなる可能性があることです(SSDでない限りある程度)。彼らは一緒に同じ量のCPU時間を使用します。

私は通常gzip *.txtまたは同様のものを使用します。

関連情報