将进程分配给核心

将进程分配给核心

我正在尝试尽可能缩短程序的运行时间,该程序由我编写的“主” 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 个进程

相关内容