Я стараюсь максимально сократить время выполнения программы, которое обрабатывается «основным» сценарием bash, который я написал.
Мой способ распараллеливания процесса (поскольку он полностью распараллеливаемый) заключается в следующем
for((i=0;i<${max_processes};i++)) ; do
echo "Creating child with arg ${i}"
bash _spawn.sh ${i} &
done
wait
Сценарий _spawn.sh что-то делает с переданным аргументом.
Во время ожидания я наблюдал журнал htop
, и я не был полностью уверен, что это правильный способ распараллеливания процедуры (хотя время ЦП сейчас меньше).
Могу ли я сделать это в другим способом?
Используя параллельную GNU:
max_processes=100
parallel bash _spawn.sh ::: $(seq 1 $max_processes)
Это запустит столько параллельных процессов, сколько у вас процессорных ядер одновременно
Проверьте https://www.gnu.org/software/parallel/
Чтобы выяснить, как он работает, N * процессорных ядер за раз, вы можете протестировать его:
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 процессорных ядер и 8 // процессов одновременно