我正在尝试尽可能缩短程序的运行时间,该程序由我编写的“主” bash 脚本处理。
我对这个过程进行并行化的方法(因为它是完全可并行化的)如下
for((i=0;i<${max_processes};i++)) ; do
echo "Creating child with arg ${i}"
bash _spawn.sh ${i} &
done
wait
_spawn.sh 脚本使用传递的参数执行一些操作。
在等待的时候我观察了htop
日志,并不完全确定这是并行化过程的正确方法(尽管现在 CPU 时间更短了)。
我可以用其他方法做这件事吗?
答案1
使用 GNU 并行:
max_processes=100
parallel bash _spawn.sh ::: $(seq 1 $max_processes)
这将同时运行与 CPU 核心数相同的并行进程
查看https://www.gnu.org/software/parallel/
为了弄清楚它是如何运行的,一次 N*CPU 核心,你可以测试它:
parallel 'sleep 1; echo arg {1}' ::: {0..100}
输出:
arg 0
arg 1
arg 2
arg 3
arg 4
arg 5
arg 6
arg 7
所以我同时有 8 个 CPU 核心和 8 个进程