Bash parallelle taken met behulp van For Loop

Bash Parallelle Taken Met Behulp Van For Loop



Er zijn veel manieren in Linux om meerdere opdrachten of Bash-scripts parallel uit te voeren. Een van de manieren is om een ​​'for'-lus in het Bash-script te gebruiken om een ​​parallelle taak uit te voeren. Deze lus is erg handig om de parallelle taken uit te voeren met behulp van de opdracht 'seq'. De verschillende manieren om de parallelle taken uit te voeren met behulp van een 'for'-lus worden in deze zelfstudie getoond.

Verschillende voorbeelden van parallelle banen

De verschillende manieren om parallelle taken uit te voeren met behulp van de 'for'-lus worden in dit deel van de zelfstudie getoond.

Voorbeeld 1: voer de parallelle taken uit met behulp van de 'For'-lus

Het gebruik van de 'for' -lus is de eenvoudigere manier om de parallelle taken in het Bash-script uit te voeren. Maak een Bash-bestand met het volgende script dat de 'for'-lus 10.000 keer uitvoert en een nummer afdrukt na de iteratie van 1000 keer. Deze taak wordt parallel uitgevoerd met behulp van de 'for'-lus.







#!/bin/bash

#Herhaal de lus totdat hij 10000 bereikt

voor val in ` volg 0 1000 10000 ` ;

Doen

#Druk elk 1000ste nummer af

echo $val

klaar

De volgende uitvoer verschijnt na het uitvoeren van het script. Er zijn 10 getallen tussen 0 en 10000 die in de uitvoer worden afgedrukt:



  p3



Voorbeeld 2: voer de parallelle taken uit met behulp van de geneste 'For'-lus

Maak een Bash-bestand met het volgende script dat de geneste 'for'-lus uitvoert die het serienummer genereert met behulp van de alfabetische tekens van 'A' tot 'C' en de cijfers 1 tot 3. In de eerste iteratie van de buitenste lus en daarna voltooiing van de iteratie van de binnenste lus, 'A1. CodeIgniter”, “A2. Laravel', en 'A3. CakePHP' worden afgedrukt. In de tweede iteratie van de buitenste lus en na voltooiing van de iteratie van de binnenste lus, “B1. Orakel”, “B2. MySQL', en 'B3. SQL' worden afgedrukt. In de derde iteratie van de buitenste lus en na voltooiing van de iteratie van de binnenste lus, “C1. CSS”, “C2. JQuery', en 'C3. JavaScript' worden afgedrukt.





#Buitenlus

voor alfa in { AC }

Doen

#Binnenlus

voor nummer in { 1 .. 3 }

Doen

#Druk de uitvoer af op basis van de voorwaarde

als [ $alfa == 'A' ] ; Dan

arrayLijst = ( 'CodeIgniter' 'Laravel' 'CakePHP' )

elif [ $alfa == 'B' ] ; Dan

arrayLijst = ( 'Orakel' 'MySQL' 'SQL' )

elif [ $alfa == 'C' ] ; Dan

arrayLijst = ( 'CSS' 'JQuery' 'JavaScript' )

zijn

echo ' $alfa $nummer . ${arrayLijst[$nummer-1]} '

klaar

klaar

De volgende uitvoer verschijnt na het uitvoeren van het script:



Voorbeeld 3: voer de parallelle taken uit met de opdracht 'For' en 'Wait'.

De opdracht 'wachten' is een zeer nuttige opdracht van Bash die wordt gebruikt om te wachten tot één taak de taak voltooit wanneer er meerdere taken worden uitgevoerd. Als er minder taken worden uitgevoerd, start de opdracht 'wachten' asynchroon een nieuwe taak. Maak een Bash-bestand met het volgende script dat een achtergrondtaak uitvoert binnen de geneste 'for'-lus. De opdracht 'wait' wordt gebruikt om te wachten tot alle onderliggende processen zijn voltooid. De opdrachten 'date' en 'sleep' worden uitgevoerd als het achtergrondproces.

#Buitenlus

voor i in { 1 .. 2 }

Doen

#Binnenlus

voor J in { 1 .. 3 }

Doen

als test ' $(banen | wc -l) ' -ge 2 ; Dan

wachten -N

zijn

#Achtergrondproces

{

datum

slaap 1

} &

klaar

klaar

De volgende uitvoer verschijnt na het uitvoeren van het script. De huidige datum en tijd worden 6 keer afgedrukt vanuit het achtergrondproces om de geneste 'for'-lussen 2×3=6 keer te herhalen:

Voorbeeld 4: verschillen tussen sequentiële en parallelle runs

Maak een Bash-bestand met het volgende script dat de verschillen laat zien tussen de sequentiële uitvoering en de parallelle uitvoering. De functie prn_char() is in het script gedefinieerd om vijf tekens met een duur van 0,5 seconde af te drukken. Vervolgens wordt de eerste 'for'-lus gebruikt om de functie prn_char() achtereenvolgens uit te voeren. De tweede 'for'-lus wordt gebruikt om de functie prn_char() parallel uit te voeren.

#Definieer een functie om 5 tekens af te drukken met een duur van 0,5 seconde

prn_char ( ) {

voor C in Hallo; Doen

slaap 0,5 ;

echo -N $ c ;

klaar

echo

}

#Voer de functie achtereenvolgens uit met behulp van de for-lus

voor uit in { 1 .. 3 } ; Doen

prn_char ' $ uit '

klaar

#Voer de functie parallel uit met behulp van de for-lus

voor uit in { 1 .. 3 } ; Doen

prn_char ' $ uit ' &

klaar


De volgende uitvoer verschijnt na het uitvoeren van het script. Het verschil tussen de sequentiële run en de parallelle run wordt weergegeven in de uitvoer. Hier worden alle tekens van de 'for'-lus van de functie prn_char() tegelijk afgedrukt in de sequentiële run en elk teken wordt drie keer afgedrukt in de parallelle run:

  p4

Conclusie

Het uitvoeren van de parallelle taken met behulp van de 'for'-lus is vereist voor veel programmeerdoeleinden. De methoden voor het uitvoeren van de parallelle taken met behulp van de 'for'-lus worden in deze zelfstudie getoond.