Bucle for paralelo en bash con ejecución secuencial simultánea de otra tarea con dependencias en el bucle paralelizado

Bucle for paralelo en bash con ejecución secuencial simultánea de otra tarea con dependencias en el bucle paralelizado

En mi script bash, necesito ejecutar dos funciones diferentes, taskAy taskB, que toman un número entero ( $i) como argumento. Dado que taskB $idepende de la finalización de taskA $i, el siguiente fragmento de código abreviado hace el trabajo:

#!/bin/bash

taskA(){
  ...
}

taskB(){
  ...
}

for i in {1..100};
do
  taskA $i
  taskB $i
done

Como taskAse puede ejecutar en diferentes$i independiente, puedo crear un semáforo (tomado de aquíParalelizar un bucle FOR de Bash) y ejecutarlo en paralelo. Sin embargo, taskB $irequiere la finalización de taskA $iy el anterior taskB $(i-1). Por lo tanto, simplemente los ejecuto secuencialmente después:

#!/bin/bash

open_sem(){
  mkfifo pipe-$$
  exec 3<>pipe-$$
  rm pipe-$$
  local i=$1
  for((;i>0;i--)); do
    printf %s 000 >&3
  done
}

run_with_lock(){
  local x
  read -u 3 -n 3 x && ((0==x)) || exit $x
  (
   ( "$@"; )
  printf '%.3d' $? >&3
  )&
}

taskA(){
  ...
}

taskB(){
  ...
}

N=36
open_sem $N
for i in {1..100};
do
  run_with_lock taskA $i
done

wait

for i in {1..100};
do
  taskB $i
done

Para optimizar aún más el procedimiento, ¿es posible mantener el semáforo para la ejecución paralela taskAy ejecutarlo taskBsimultáneamente de tal manera que no "supere" taskAy espere a que se complete la tarea A de la que depende?

información relacionada