Parallele For-Schleife in Bash mit gleichzeitiger sequentieller Ausführung einer anderen Aufgabe mit Abhängigkeiten von der parallelisierten Schleife

Parallele For-Schleife in Bash mit gleichzeitiger sequentieller Ausführung einer anderen Aufgabe mit Abhängigkeiten von der parallelisierten Schleife

In meinem Bash-Skript muss ich zwei verschiedene Funktionen ausführen, taskAund taskB, die eine Ganzzahl ( $i) als Argument annehmen. Da taskB $ivon der Ausführung von abhängt taskA $i, erledigt der folgende verkürzte Codeabschnitt diese Aufgabe:

#!/bin/bash

taskA(){
  ...
}

taskB(){
  ...
}

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

Da taskAes unabhängig voneinander ausgeführt werden kann $i, kann ich ein Semaphor erstellen (von hier übernommenParallelisieren einer Bash FOR-Schleife) und führe es parallel aus. Allerdings taskB $ierfordert es die Fertigstellung von taskA $iund des vorherigen taskB $(i-1). Daher führe ich sie einfach nacheinander aus:

#!/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

Ist es zur weiteren Optimierung des Verfahrens möglich, den Semaphor zur parallelen Ausführung von taskAund gleichzeitigem Ablauf taskBso zu halten, dass er nicht „überholt“ taskA, sondern auf die Fertigstellung der für ihn wichtigen TaskA wartet?

verwandte Informationen