我正在寻求加速 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
或者类似的。