Ulike eksempler på parallelle jobber
De forskjellige måtene å kjøre parallelljobbene ved å bruke 'for'-løkken er vist i denne delen av opplæringen.
Eksempel 1: Kjør de parallelle jobbene ved å bruke 'For'-løkken
Å bruke 'for'-løkken er den enklere måten å utføre parallelljobbene i Bash-skriptet. Lag en Bash-fil med følgende skript som kjører 'for'-løkken 10000 ganger og skriv ut et tall etter iterasjonen på 1000 ganger. Denne oppgaven gjøres parallelt ved å bruke 'for'-løkken.
#!/bin/bash
#Iterer løkken til den når 10 000
til val i ` seq 0 1000 10 000 ` ;
gjøre
#Skriv ut hvert 1000. nummer
ekko $val
ferdig
Følgende utdata vises etter utføring av skriptet. Det er 10 tall mellom 0 og 10000 som skrives ut i utdataene:
Eksempel 2: Kjør de parallelle jobbene ved å bruke den nestede 'For'-sløyfen
Lag en Bash-fil med følgende skript som kjører den nestede 'for'-løkken som genererer serienummeret ved å bruke de alfabetiske tegnene fra 'A' til 'C' og tallene 1 til 3. I den første iterasjonen av den ytre løkken og etter fullføre iterasjonen av den indre løkken, 'A1. CodeIgniter', 'A2. Laravel', og 'A3. CakePHP' skrives ut. I den andre iterasjonen av den ytre sløyfen og etter å ha fullført iterasjonen av den indre sløyfen, 'B1. Oracle', 'B2. MySQL' og 'B3. SQL' skrives ut. I den tredje iterasjonen av den ytre sløyfen og etter å ha fullført iterasjonen av den indre sløyfen, 'C1. CSS', 'C2. JQuery' og 'C3. JavaScript' skrives ut.
#Ytre løkke
til alfa i { A..C }
gjøre
#Indre løkke
til Antall i { 1 .. 3 }
gjøre
#Skriv ut utskriften basert på tilstanden
hvis [ $alfa == 'EN' ] ; deretter
arrayList = ( 'CodeIgniter' 'Laravel' 'CakePHP' )
elif [ $alfa == 'B' ] ; deretter
arrayList = ( 'Oracle' 'MySQL' 'SQL' )
elif [ $alfa == 'C' ] ; deretter
arrayList = ( 'CSS' 'JQuery' 'JavaScript' )
være
ekko ' $alfa $nummer . ${arrayList[$number-1]} '
ferdig
ferdig
Følgende utdata vises etter utføring av skriptet:
Eksempel 3: Kjør de parallelle jobbene ved å bruke 'For'-sløyfen og 'Vent'-kommandoen
'Vent'-kommandoen er en veldig nyttig kommando av Bash som brukes til å vente på en jobb for å fullføre oppgaven når flere jobber kjører. Hvis færre jobber kjører, starter 'vent'-kommandoen en ny jobb asynkront. Lag en Bash-fil med følgende skript som kjører en bakgrunnsjobb i den nestede 'for'-løkken. 'vent'-kommandoen brukes til å vente på å fullføre alle underordnede prosesser. Kommandoene 'dato' og 'sleep' utføres som bakgrunnsprosessen.
#Ytre løkketil Jeg i { 1 .. 2 }
gjøre
#Indre løkke
til j i { 1 .. 3 }
gjøre
hvis test ' $(jobber | wc -l) ' -ge 2 ; deretter
vente -n
være
#Bakgrunnsprosess
{
Dato
sove 1
} &
ferdig
ferdig
Følgende utdata vises etter utføring av skriptet. Gjeldende dato og klokkeslett skrives ut 6 ganger fra bakgrunnsprosessen for å iterere de nestede 'for'-løkkene 2×3=6 ganger:
Eksempel 4: Forskjeller mellom sekvensielle og parallelle kjøringer
Lag en Bash-fil med følgende skript som viser forskjellene mellom den sekvensielle kjøringen og den parallelle kjøringen. Funksjonen prn_char() er definert i skriptet for å skrive ut fem tegn med 0,5 sekunders varighet. Deretter brukes den første 'for'-løkken til å kjøre prn_char()-funksjonen sekvensielt. Den andre 'for'-løkken brukes til å kjøre prn_char()-funksjonen parallelt.
#Definer en funksjon for å skrive ut 5 tegn med 0,5 sekunders varighetprn_char ( ) {
til c i Hallo; gjøre
sove 0,5 ;
ekko -n $c ;
ferdig
ekko
}
#Kjør funksjonen med for loop sekvensielt
til ute i { 1 .. 3 } ; gjøre
prn_char ' $ut '
ferdig
#Kjør funksjonen med for loop parallelt
til ute i { 1 .. 3 } ; gjøre
prn_char ' $ut ' &
ferdig
Følgende utdata vises etter utføring av skriptet. Forskjellen mellom den sekvensielle kjøringen og den parallelle kjøringen vises i utgangen. Her blir alle tegnene i 'for'-løkken til prn_char()-funksjonen skrevet ut om gangen i den sekvensielle kjøringen, og hvert tegn skrives ut tre ganger i den parallelle kjøringen:
Konklusjon
Å kjøre parallelljobbene ved å bruke 'for'-løkke er nødvendig for mange programmeringsformål. Metodene for å kjøre parallelljobbene ved å bruke 'for'-løkken er vist i denne opplæringen.