Loop for paralelo no bash com execução sequencial simultânea de outra tarefa com dependências do loop paralelizado

Loop for paralelo no bash com execução sequencial simultânea de outra tarefa com dependências do loop paralelizado

No meu script bash, preciso executar duas funções diferentes, taskAe taskB, que usam um número inteiro ( $i) como argumento. Como taskB $idepende da conclusão de taskA $i, o seguinte trecho de código abreviado faz o trabalho:

#!/bin/bash

taskA(){
  ...
}

taskB(){
  ...
}

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

Como taskApode ser executado de forma $iindependente, posso criar um semáforo (retirado daquiParalelizar um loop Bash FOR) e execute-o em paralelo. No entanto, taskB $irequer a conclusão de taskA $ie do anterior taskB $(i-1). Portanto, eu apenas os executo sequencialmente depois:

#!/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 otimizar ainda mais o procedimento, é possível manter o semáforo para execução paralela taskAe rodar taskBsimultaneamente de forma que ele não “ultrapasse” taskAe aguarde a conclusão da tarefaA da qual depende?

informação relacionada