여러 작업 실행: 병렬과 직렬의 조합

여러 작업 실행: 병렬과 직렬의 조합

a_1, a_2, b_1, b_2, c_1, c_2 작업을 다음과 같이 실행하고 싶습니다. a_i, b_j, c_k(i, j, k는 0 또는 1임)를 병렬로 실행할 수 있습니다. 그러나 a_2는 a_1이 완료된 후 즉시 실행되어야 합니다(동일한 리소스를 사용하므로 a_2는 a_1이 리소스를 해제할 때까지 기다려야 합니다). b와 c와 동일합니다.

Bash에서 어떻게 할 수 있나요?

답변1

( a_1; a_2 ) &
( b_1; b_2 ) &
( c_1; c_2 ) &
wait

그러면 세 가지 백그라운드 작업이 실행되고 모두 완료될 때까지 기다립니다. 세 가지 백그라운드 작업은 각각 해당 명령을 차례로 실행합니다.

약간 더 복잡한 변형의 경우:

for task in a b c; do
    for num in 1 2; do "${task}_$num"; done &
done
wait

이는 동일한 작업을 수행하지만 문자열 등을 구성한 a_1다음 a_2해당 문자열을 명령으로 생성하여 발생하는 작업을 수행합니다. 분명히 이것은 작업이 이러한 이름을 가진 실제 명령인 경우에만 작동합니다.

답변2

GNU 병렬 처리 사용:

parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c

또는:

parallel '{}_0; {}_1; {}_2' ::: a b c

관련 정보