问题描述
简单的嵌套循环:
while read f1; do
while read f2; do
ipv4comb+=($f1,f2)
done < $src2
done < $src1
$src1 has 88 lines
$src2 has 175 lines
produced output has 15400 lines
$src1
是通过ssh检索的,因此查找略有不同,但是,此循环通常产生:
./run.sh 0.34s user 0.18s system 15% cpu 3.327 total
如果我将循环替换为:
parallel -j+0 echo {1} {2} :::: $temp_ipv4 $MM_BLACKLIST_IPV4 | wc -l
它产生:
./run.sh 49.31s user 31.27s system 242% cpu 33.239 total
我在做什么错了?
解决方法
GNU Parallel每个作业的开销约为2-10毫秒,因此49s中的15400个作业在预期范围内。
有一些技巧可以应对短期工作。但是,它们不适用于您的情况: https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Speeding-up-fast-jobs