Bash Parallel งานที่ใช้สำหรับลูป

Bash Parallel Ngan Thi Chi Sahrab Lup



มีหลายวิธีใน Linux ในการเรียกใช้หลายคำสั่งหรือสคริปต์ Bash พร้อมกัน วิธีหนึ่งคือการใช้ลูป 'for' ในสคริปต์ Bash เพื่อเรียกใช้งานแบบขนาน การวนซ้ำนี้มีประโยชน์มากในการรันงานแบบขนานโดยใช้คำสั่ง 'seq' วิธีต่างๆ ในการทำงานแบบขนานโดยใช้ลูป 'for' แสดงอยู่ในบทช่วยสอนนี้

ตัวอย่างงานคู่ขนานแบบต่างๆ

วิธีต่างๆ ในการรันงานคู่ขนานโดยใช้ลูป 'for' จะแสดงในส่วนนี้ของบทช่วยสอน

ตัวอย่างที่ 1: รัน Parallel Jobs โดยใช้ลูป 'For'

การใช้ลูป 'for' เป็นวิธีที่ง่ายกว่าในการทำงานคู่ขนานในสคริปต์ Bash สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่รันลูป 'for' 10,000 ครั้งและพิมพ์ตัวเลขหลังจากการวนซ้ำ 1,000 ครั้ง งานนี้ทำพร้อมกันโดยใช้ลูป 'for'







#!/bin/bash

#วนซ้ำจนกว่าจะถึง10,000

สำหรับ วาล ใน ` รองลงมา 0 1,000 10,000 ` ;

ทำ

#พิมพ์ทุกๆ1000

เสียงสะท้อน $val

เสร็จแล้ว

ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ มีตัวเลข 10 ตัวระหว่าง 0 ถึง 10,000 ที่พิมพ์ออกมา:



  หน้า 3



ตัวอย่างที่ 2: รัน Parallel Jobs โดยใช้ลูป 'For' ที่ซ้อนกัน

สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่เรียกใช้ลูป 'for' ที่ซ้อนกันซึ่งสร้างหมายเลขซีเรียลโดยใช้อักขระตัวอักษรตั้งแต่ 'A' ถึง 'C' และตัวเลข 1 ถึง 3 ในการวนซ้ำครั้งแรกของลูปภายนอกและหลังจากนั้น เสร็จสิ้นการวนซ้ำของวงใน “A1. CodeIgniter”, “A2. Laravel” และ “A3. พิมพ์ CakePHP” ในการวนซ้ำครั้งที่สองของวงรอบนอกและหลังจากเสร็จสิ้นการวนซ้ำของวงใน “B1. ออราเคิล”, “B2. MySQL” และ “B3. พิมพ์ SQL” ในการวนซ้ำครั้งที่สามของวงรอบนอกและหลังจากเสร็จสิ้นการวนซ้ำวงในแล้ว “C1. CSS', 'C2. JQuery” และ “C3. พิมพ์ JavaScript”





#วงนอก

สำหรับ อัลฟ่า ใน { เอ.ซี }

ทำ

#วงใน

สำหรับ ตัวเลข ใน { 1 .. 3 }

ทำ

#พิมพ์ผลลัพธ์ตามเงื่อนไข

ถ้า [ $อัลฟ่า == 'เอ' ] ; แล้ว

รายการอาร์เรย์ = ( 'โค้ดอิกนิเตอร์' 'ลาราเวล' 'เค้กPHP' )

เอลฟ์ [ $อัลฟ่า == 'บี' ] ; แล้ว

รายการอาร์เรย์ = ( 'ออราเคิล' 'มายเอสคิวแอล' 'เอสคิวแอล' )

เอลฟ์ [ $อัลฟ่า == 'ค' ] ; แล้ว

รายการอาร์เรย์ = ( 'ซีเอสเอส' 'เจคิวรี่' 'จาวาสคริปต์' )

เป็น

เสียงสะท้อน ' $อัลฟ่า จำนวน $ . ${arrayList[$number-1]} '

เสร็จแล้ว

เสร็จแล้ว

ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้สคริปต์:



ตัวอย่างที่ 3: เรียกใช้ Parallel Jobs โดยใช้คำสั่ง 'For' Loop และ 'Wait'

คำสั่ง “รอ” เป็นคำสั่งที่มีประโยชน์มากของ Bash ที่ใช้ในการรอให้งานหนึ่งทำงานให้เสร็จในขณะที่งานหลายงานกำลังทำงานอยู่ หากมีการรันงานน้อยลง คำสั่ง 'รอ' จะเริ่มงานใหม่แบบอะซิงโครนัส สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่เรียกใช้งานพื้นหลังภายในลูป 'for' ที่ซ้อนกัน คำสั่ง 'รอ' ใช้สำหรับรอให้กระบวนการลูกทั้งหมดเสร็จสิ้น คำสั่ง 'วันที่' และ 'สลีป' จะถูกดำเนินการเป็นกระบวนการเบื้องหลัง

#วงนอก

สำหรับ ฉัน ใน { 1 .. 2 }

ทำ

#วงใน

สำหรับ เจ ใน { 1 .. 3 }

ทำ

ถ้า ทดสอบ ' $(งาน | wc -l) ' -ge 2 ; แล้ว

รอ -น

เป็น

#กระบวนการเบื้องหลัง

{

วันที่

นอน 1

} &

เสร็จแล้ว

เสร็จแล้ว

ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ วันที่และเวลาปัจจุบันถูกพิมพ์ 6 ครั้งจากกระบวนการพื้นหลังเพื่อวนซ้ำ 'for' ที่ซ้อนกันเป็น 2×3=6 ครั้ง:

ตัวอย่างที่ 4: ความแตกต่างระหว่างการรันแบบต่อเนื่องและแบบขนาน

สร้างไฟล์ Bash ด้วยสคริปต์ต่อไปนี้ที่แสดงความแตกต่างระหว่างการรันตามลำดับและการรันแบบขนาน ฟังก์ชัน prn_char() กำหนดไว้ในสคริปต์เพื่อพิมพ์อักขระ 5 ตัวด้วยระยะเวลา 0.5 วินาที ถัดไป ลูป 'for' แรกใช้เพื่อเรียกใช้ฟังก์ชัน prn_char() ตามลำดับ ลูป 'for' ที่สองใช้เพื่อเรียกใช้ฟังก์ชัน prn_char() แบบขนาน

#Define ฟังก์ชั่นการพิมพ์ 5 ตัวอักษรที่มีระยะเวลา 0.5 วินาที

prn_char ( ) {

สำหรับ ใน สวัสดี; ทำ

นอน 0.5 ;

เสียงสะท้อน -น $ค ;

เสร็จแล้ว

เสียงสะท้อน

}

# เรียกใช้ฟังก์ชันโดยใช้ for วนซ้ำตามลำดับ

สำหรับ ออก ใน { 1 .. 3 } ; ทำ

prn_char ' $ ออก '

เสร็จแล้ว

# เรียกใช้ฟังก์ชันโดยใช้ for วนซ้ำแบบขนาน

สำหรับ ออก ใน { 1 .. 3 } ; ทำ

prn_char ' $ ออก ' &

เสร็จแล้ว


ผลลัพธ์ต่อไปนี้ปรากฏขึ้นหลังจากเรียกใช้งานสคริปต์ ความแตกต่างระหว่างการรันตามลำดับและการรันแบบขนานจะแสดงในเอาต์พุต ที่นี่ อักขระทั้งหมดของลูป 'for' ของฟังก์ชัน prn_char() จะถูกพิมพ์ทีละครั้งในการรันตามลำดับ และอักขระแต่ละตัวจะถูกพิมพ์สามครั้งในการรันแบบขนาน:

  หน้า 4

บทสรุป

การรันงานแบบขนานโดยใช้ลูป 'for' จำเป็นสำหรับจุดประสงค์ในการเขียนโปรแกรมหลายอย่าง วิธีการเรียกใช้งานแบบขนานโดยใช้ลูป 'for' แสดงไว้ในบทช่วยสอนนี้