Bash Pagina 116

De la Wiki Linux Advanced
Sari la navigare Sari la căutare

Rularea Proceselor în Paralel folosind Subshell-uri

Folosirea subshell-urilor în Bash permite rularea proceselor în paralel, ceea ce poate îmbunătăți performanța atunci când aveți mai multe comenzi independente de executat. Prin lansarea mai multor subshell-uri simultan, fiecare va rula în fundal și se va termina independent de celelalte procese.

Exemplu de Rulare Paralelă folosind Subshell-uri

Pentru a rula procese în paralel, fiecare set de comenzi trebuie plasat într-un subshell, folosind paranteze rotunde (...) și operatorul & pentru rulare în fundal.

#!/bin/bash
# Funcție pentru a simula o sarcină
task() {
 echo "Încep sarcina $1..."
 sleep "$1"
 echo "Sarcina $1 terminată."
}
# Lansăm fiecare sarcină în paralel folosind subshell-uri
(task 3) &
(task 5) &
(task 2) &
# Așteptăm toate procesele să se termine
wait
echo "Toate sarcinile s-au terminat."

Explicație:

Fiecare apel la funcția task este lansat într-un subshell și rulează în fundal (&). Comanda wait așteaptă ca toate procesele în fundal să se termine înainte de a continua cu execuția scriptului principal.

Output:

Încep sarcina 3...
Încep sarcina 5...
Încep sarcina 2...
Sarcina 2 terminată.
Sarcina 3 terminată.
Sarcina 5 terminată.
Toate sarcinile s-au terminat.

Observați că timpul total de execuție va fi determinat de cea mai lungă durată dintre procesele lansate, deoarece rulează în paralel.

Folosirea subshell-urilor pentru rularea în paralel este utilă pentru sarcini care nu depind una de cealaltă, cum ar fi procesarea mai multor fișiere sau descărcarea de resurse din rețea.

#!/bin/bash
# Procesăm fișiere în paralel
for i in {1..5}; do
 (echo "Procesare fișier$i..." && sleep $((RANDOM % 5)) && echo "Fișier$i procesat") &
done
# Așteptăm toate procesele în fundal să se termine
wait
echo "Toate fișierele au fost procesate."

Avantaje

  • Economisire de timp: Rularea mai multor sarcini simultan reduce durata totală de execuție.
  • Gestionare ușoară: Fiecare sarcină rulează într-un subshell, ceea ce asigură că erorile dintr-un proces nu afectează celelalte.

Concluzie

Rularea proceselor în paralel cu subshell-uri permite execuția eficientă a sarcinilor independente, reducând timpul total de procesare și oferind o abordare modulară și izolată pentru gestionarea proceselor.


Pagina anterioară | Următoarea pagină