Bash Pagina 116: Diferență între versiuni
Admin (discuție | contribuții) (Pagină nouă: Pagina anterioară | Următoarea pagină) |
Admin (discuție | contribuții) Fără descriere a modificării |
||
Linia 1: | Linia 1: | ||
== 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. | |||
[[Bash_Pagina_115|Pagina anterioară]] | [[Bash_Pagina_117|Următoarea pagină]] | [[Bash_Pagina_115|Pagina anterioară]] | [[Bash_Pagina_117|Următoarea pagină]] |
Versiunea curentă din 30 octombrie 2024 18:16
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.