Bash Pagina 116
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.