gzip *.txt 与 gzip test.txt & gzip test2.txt &

gzip *.txt 与 gzip test.txt & gzip test2.txt &

我正在寻求加速 gzip 过程。 (服务器是AIX 7.1)

更具体地说,当前的实现需要gzip *.txt最多 1 小时才能完成。 (提取的文件很大,总共有10个文件)

问:跑步效率会更高吗

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一次只做一个,因为它们是单独的文件。

并行运行它们(使用gzip file1.txt等)可能更快,但这取决于你有多少内存、多少个 CPU 核心等。最重要的因素是你在执行此操作时会出现磁盘争用,这可能会减慢速度(除非它是 SSD,甚至在某种程度上)。它们总共使用的 CPU 时间量相似。

我一般用gzip *.txt或者类似的。

相关内容