Forskellige eksempler på parallelle job
De forskellige måder at køre de parallelle job ved hjælp af 'for'-løkken er vist i denne del af selvstudiet.
Eksempel 1: Kør de parallelle job ved hjælp af 'For'-løkken
Brug af 'for'-løkken er den nemmere måde at udføre de parallelle job i Bash-scriptet. Opret en Bash-fil med følgende script, der kører 'for'-løkken 10000 gange og udskriv et tal efter iterationen på 1000 gange. Denne opgave udføres parallelt ved hjælp af 'for'-løkken.
#!/bin/bash
#Gentag løkken, indtil den når 10000
til val i ` seq 0 1000 10.000 ` ;
gør
#Udskriv hvert 1000. nummer
ekko $val
Færdig
Følgende output vises efter eksekvering af scriptet. Der er 10 tal mellem 0 og 10.000, der udskrives i outputtet:
Eksempel 2: Kør de parallelle job ved hjælp af den indlejrede 'For'-løkke
Opret en Bash-fil med følgende script, der kører den indlejrede 'for'-løkke, der genererer serienummeret ved hjælp af de alfabetiske tegn fra 'A' til 'C' og tallene 1 til 3. I den første iteration af den ydre løkke og efter færdiggørelse af iterationen af den indre sløjfe, 'A1. CodeIgniter', 'A2. Laravel' og 'A3. CakePHP' udskrives. I den anden iteration af den ydre sløjfe og efter at have fuldført iterationen af den indre sløjfe, 'B1. Oracle', 'B2. MySQL' og 'B3. SQL' udskrives. I den tredje iteration af den ydre sløjfe og efter at have fuldført iterationen af den indre sløjfe, 'C1. CSS', 'C2. JQuery' og 'C3. JavaScript' udskrives.
#Ydre sløjfe
til alfa i { A..C }
gør
#Indre sløjfe
til nummer i { 1 .. 3 }
gør
#Udskriv output baseret på betingelsen
hvis [ $alfa == 'EN' ] ; derefter
arrayList = ( 'CodeIgniter' 'Laravel' 'CakePHP' )
elif [ $alfa == 'B' ] ; derefter
arrayList = ( 'Oracle' 'MySQL' 'SQL' )
elif [ $alfa == 'C' ] ; derefter
arrayList = ( 'CSS' 'JQuery' 'JavaScript' )
være
ekko ' $alfa $nummer . ${arrayList[$number-1]} '
Færdig
Færdig
Følgende output vises efter eksekvering af scriptet:
Eksempel 3: Kør de parallelle jobs ved hjælp af 'For'-løkken og 'Vent'-kommandoen
'Vent'-kommandoen er en meget nyttig kommando i Bash, der bruges til at vente på, at ét job fuldfører opgaven, når flere job kører. Hvis færre job kører, starter 'vent'-kommandoen et nyt job asynkront. Opret en Bash-fil med følgende script, der kører et baggrundsjob inde i den indlejrede 'for'-løkke. Kommandoen 'vent' bruges til at vente på at fuldføre alle underordnede processer. Kommandoerne 'dato' og 'sleep' udføres som baggrundsprocessen.
#Ydre sløjfetil jeg i { 1 .. 2 }
gør
#Indre sløjfe
til j i { 1 .. 3 }
gør
hvis prøve ' $(job | wc -l) ' -ge 2 ; derefter
vente -n
være
#Baggrundsproces
{
dato
søvn 1
} &
Færdig
Færdig
Følgende output vises efter eksekvering af scriptet. Den aktuelle dato og klokkeslæt udskrives 6 gange fra baggrundsprocessen for at iterere de indlejrede 'for'-løkker 2×3=6 gange:
Eksempel 4: Forskelle mellem sekventielle og parallelle kørsler
Opret en Bash-fil med følgende script, der viser forskellene mellem den sekventielle kørsel og den parallelle kørsel. Funktionen prn_char() er defineret i scriptet til at udskrive fem tegn med 0,5 sekunders varighed. Dernæst bruges den første 'for'-løkke til at køre prn_char()-funktionen sekventielt. Den anden 'for'-løkke bruges til at køre funktionen prn_char() parallelt.
#Definer en funktion til at udskrive 5 tegn med 0,5 sekunders varighedprn_char ( ) {
til c i Hej; gør
søvn 0,5 ;
ekko -n $c ;
Færdig
ekko
}
#Kør funktionen ved hjælp af for loop sekventielt
til ud i { 1 .. 3 } ; gør
prn_char ' $ ud '
Færdig
#Kør funktionen med for loop parallelt
til ud i { 1 .. 3 } ; gør
prn_char ' $ ud ' &
Færdig
Følgende output vises efter eksekvering af scriptet. Forskellen mellem den sekventielle kørsel og den parallelle kørsel vises i outputtet. Her udskrives alle tegnene i 'for'-løkken i prn_char()-funktionen ad gangen i den sekventielle kørsel, og hvert tegn udskrives tre gange i den parallelle kørsel:
Konklusion
Kørsel af de parallelle job ved hjælp af 'for' loop er påkrævet til mange programmeringsformål. Metoderne til at køre de parallelle job ved hjælp af 'for'-løkken er vist i denne øvelse.