ระบบปฏิบัติการ - Multi-Threading
Thread คืออะไร?
เธรดคือโฟลว์ของการดำเนินการผ่านโค้ดกระบวนการโดยมีตัวนับโปรแกรมของตัวเองที่คอยติดตามว่าคำสั่งใดที่จะดำเนินการต่อไประบบจะลงทะเบียนซึ่งมีตัวแปรการทำงานปัจจุบันและสแต็กซึ่งมีประวัติการดำเนินการ
เธรดใช้ร่วมกับเธรดเพียร์ที่มีข้อมูลเพียงเล็กน้อยเช่นเซ็กเมนต์โค้ดเซ็กเมนต์ข้อมูลและไฟล์ที่เปิด เมื่อเธรดหนึ่งแก้ไขรายการหน่วยความจำส่วนโค้ดเธรดอื่น ๆ ทั้งหมดจะเห็นสิ่งนั้น
เธรดเรียกอีกอย่างว่าไฟล์ lightweight process. เธรดเป็นวิธีการปรับปรุงประสิทธิภาพของแอปพลิเคชันผ่านการทำงานแบบขนาน เธรดแสดงถึงแนวทางของซอฟต์แวร์ในการปรับปรุงประสิทธิภาพของระบบปฏิบัติการโดยการลดเธรดค่าโสหุ้ยนั้นเทียบเท่ากับกระบวนการแบบดั้งเดิม
แต่ละเธรดเป็นของกระบวนการเดียวและไม่มีเธรดใดอยู่นอกกระบวนการ แต่ละเธรดแสดงถึงการควบคุมที่แยกจากกัน เธรดถูกใช้อย่างประสบความสำเร็จในการติดตั้งเซิร์ฟเวอร์เครือข่ายและเว็บเซิร์ฟเวอร์ นอกจากนี้ยังมีพื้นฐานที่เหมาะสมสำหรับการทำงานแบบขนานของแอปพลิเคชันบนมัลติโปรเซสเซอร์หน่วยความจำแบบแบ่งใช้ รูปต่อไปนี้แสดงการทำงานของกระบวนการเธรดเดียวและมัลติเธรด
ความแตกต่างระหว่างกระบวนการและเธรด
SN | กระบวนการ | เกลียว |
---|---|---|
1 | กระบวนการมีน้ำหนักมากหรือใช้ทรัพยากรมาก | ด้ายมีน้ำหนักเบาใช้ทรัพยากรน้อยกว่ากระบวนการ |
2 | การสลับกระบวนการต้องการการโต้ตอบกับระบบปฏิบัติการ | การสลับเธรดไม่จำเป็นต้องโต้ตอบกับระบบปฏิบัติการ |
3 | ในสภาพแวดล้อมการประมวลผลที่หลากหลายแต่ละกระบวนการจะรันโค้ดเดียวกัน แต่มีหน่วยความจำและทรัพยากรไฟล์ของตัวเอง | เธรดทั้งหมดสามารถแชร์ไฟล์ที่เปิดชุดเดียวกันกระบวนการย่อย |
4 | หากกระบวนการหนึ่งถูกปิดกั้นจะไม่มีกระบวนการอื่นใดสามารถดำเนินการได้จนกว่ากระบวนการแรกจะถูกบล็อก | ในขณะที่เธรดหนึ่งถูกบล็อกและรอเธรดที่สองในภารกิจเดียวกันสามารถรันได้ |
5 | หลายกระบวนการโดยไม่ใช้เธรดใช้ทรัพยากรมากขึ้น | กระบวนการหลายเธรดใช้ทรัพยากรน้อยลง |
6 | ในหลายกระบวนการแต่ละกระบวนการดำเนินการโดยไม่ขึ้นกับกระบวนการอื่น ๆ | เธรดหนึ่งสามารถอ่านเขียนหรือเปลี่ยนแปลงข้อมูลของเธรดอื่นได้ |
ข้อดีของเธรด
- เธรดช่วยลดเวลาในการสลับบริบท
- การใช้เธรดให้การทำงานพร้อมกันภายในกระบวนการ
- การสื่อสารที่มีประสิทธิภาพ
- ประหยัดกว่าในการสร้างและสลับเธรดบริบท
- เธรดช่วยให้สามารถใช้สถาปัตยกรรมมัลติโปรเซสเซอร์ได้ในระดับและประสิทธิภาพที่ดีขึ้น
ประเภทของเธรด
เธรดถูกนำไปใช้ในสองวิธีต่อไปนี้ -
User Level Threads - เธรดที่จัดการโดยผู้ใช้
Kernel Level Threads - เธรดที่มีการจัดการของระบบปฏิบัติการที่ทำหน้าที่บนเคอร์เนลซึ่งเป็นแกนหลักของระบบปฏิบัติการ
เธรดระดับผู้ใช้
ในกรณีนี้เคอร์เนลการจัดการเธรดจะไม่ทราบถึงการมีอยู่ของเธรด ไลบรารีเธรดมีรหัสสำหรับการสร้างและทำลายเธรดสำหรับการส่งข้อความและข้อมูลระหว่างเธรดสำหรับการจัดกำหนดการการทำงานของเธรดและสำหรับการบันทึกและกู้คืนบริบทเธรด แอปพลิเคชันเริ่มต้นด้วยเธรดเดียว
ข้อดี
- การสลับเธรดไม่ต้องการสิทธิ์โหมดเคอร์เนล
- เธรดระดับผู้ใช้สามารถรันบนระบบปฏิบัติการใดก็ได้
- การจัดกำหนดการอาจเป็นแอปพลิเคชันเฉพาะในเธรดระดับผู้ใช้
- เธรดระดับผู้ใช้สร้างและจัดการได้อย่างรวดเร็ว
ข้อเสีย
- ในระบบปฏิบัติการทั่วไปการเรียกระบบส่วนใหญ่จะบล็อก
- แอปพลิเคชันมัลติเธรดไม่สามารถใช้ประโยชน์จากการประมวลผลหลายขั้นตอนได้
เธรดระดับเคอร์เนล
ในกรณีนี้การจัดการเธรดจะทำโดยเคอร์เนล ไม่มีรหัสการจัดการเธรดในพื้นที่แอปพลิเคชัน เคอร์เนลเธรดได้รับการสนับสนุนโดยตรงจากระบบปฏิบัติการ แอปพลิเคชันใด ๆ สามารถตั้งโปรแกรมให้เป็นแบบมัลติเธรดได้ เธรดทั้งหมดภายในแอปพลิเคชันได้รับการสนับสนุนภายในกระบวนการเดียว
เคอร์เนลจะเก็บรักษาข้อมูลบริบทสำหรับกระบวนการโดยรวมและสำหรับแต่ละเธรดภายในกระบวนการ การตั้งเวลาโดยเคอร์เนลจะทำแบบเธรด เคอร์เนลดำเนินการสร้างเธรดการตั้งเวลาและการจัดการในพื้นที่เคอร์เนล โดยทั่วไปเคอร์เนลเธรดจะสร้างและจัดการได้ช้ากว่าเธรดผู้ใช้
ข้อดี
- เคอร์เนลสามารถกำหนดเวลาเธรดหลายเธรดจากกระบวนการเดียวกันในหลายกระบวนการได้พร้อมกัน
- ถ้าเธรดหนึ่งในกระบวนการถูกบล็อกเคอร์เนลสามารถกำหนดเวลาเธรดอื่นของกระบวนการเดียวกันได้
- กิจวัตรของเคอร์เนลเองสามารถเป็นแบบมัลติเธรดได้
ข้อเสีย
- โดยทั่วไปเคอร์เนลเธรดจะสร้างและจัดการได้ช้ากว่าเธรดผู้ใช้
- การถ่ายโอนการควบคุมจากเธรดหนึ่งไปยังอีกเธรดภายในกระบวนการเดียวกันจำเป็นต้องมีการสลับโหมดไปที่เคอร์เนล
โมเดลมัลติเธรด
ระบบปฏิบัติการบางระบบมีเธรดระดับผู้ใช้รวมและสิ่งอำนวยความสะดวกเธรดระดับเคอร์เนล Solaris เป็นตัวอย่างที่ดีของแนวทางรวมนี้ ในระบบรวมเธรดหลายเธรดภายในแอ็พพลิเคชันเดียวกันสามารถทำงานแบบขนานบนโปรเซสเซอร์หลายตัวและการเรียกระบบบล็อกไม่จำเป็นต้องปิดกั้นกระบวนการทั้งหมด แบบจำลองมัลติเธรดมีสามประเภท
- หลายต่อหลายความสัมพันธ์
- ความสัมพันธ์แบบหลายต่อหนึ่ง
- ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
หลายรุ่น
แบบหลายต่อกลุ่มมัลติเพล็กซ์จำนวนเธรดผู้ใช้จำนวนเท่าใดก็ได้ไปยังเคอร์เนลเธรดที่มีจำนวนเท่ากันหรือน้อยกว่า
แผนภาพต่อไปนี้แสดงโมเดลเธรดแบบกลุ่มต่อกลุ่มโดยที่เธรดระดับผู้ใช้ 6 เธรดกำลังมัลติเพล็กซ์ด้วยเธรดระดับเคอร์เนล 6 เธรด ในโมเดลนี้นักพัฒนาสามารถสร้างเธรดผู้ใช้ได้มากเท่าที่จำเป็นและเคอร์เนลเธรดที่เกี่ยวข้องสามารถรันแบบขนานบนเครื่องมัลติโปรเซสเซอร์ โมเดลนี้ให้ความแม่นยำสูงสุดในการทำงานพร้อมกันและเมื่อเธรดทำการเรียกระบบบล็อกเคอร์เนลสามารถกำหนดเวลาเธรดอื่นสำหรับการดำเนินการ
แบบหลายต่อหนึ่ง
โมเดลแบบหลายต่อหนึ่งจะแมปเธรดระดับผู้ใช้จำนวนมากกับเธรดระดับเคอร์เนลเดียว การจัดการเธรดทำได้ในพื้นที่ผู้ใช้โดยไลบรารีเธรด เมื่อเธรดทำการเรียกระบบบล็อกกระบวนการทั้งหมดจะถูกบล็อก เธรดเดียวเท่านั้นที่สามารถเข้าถึงเคอร์เนลได้ในแต่ละครั้งดังนั้นเธรดหลายเธรดจึงไม่สามารถทำงานแบบขนานบนมัลติโปรเซสเซอร์ได้
หากไลบรารีเธรดระดับผู้ใช้ถูกนำไปใช้ในระบบปฏิบัติการในลักษณะที่ระบบไม่สนับสนุนเธรดเคอร์เนลจะใช้โหมดความสัมพันธ์แบบกลุ่มต่อหนึ่ง
แบบตัวต่อตัว
มีความสัมพันธ์แบบหนึ่งต่อหนึ่งของเธรดระดับผู้ใช้กับเธรดระดับเคอร์เนล โมเดลนี้ให้การทำงานพร้อมกันมากกว่าโมเดลแบบหลายต่อหนึ่ง นอกจากนี้ยังอนุญาตให้เธรดอื่นทำงานเมื่อเธรดทำการเรียกระบบบล็อก สนับสนุนหลายเธรดเพื่อดำเนินการแบบคู่ขนานบนไมโครโปรเซสเซอร์
ข้อเสียของโมเดลนี้คือการสร้างเธรดผู้ใช้ต้องใช้เคอร์เนลเธรดที่สอดคล้องกัน OS / 2, windows NT และ windows 2000 ใช้รูปแบบความสัมพันธ์แบบหนึ่งต่อหนึ่ง
ความแตกต่างระหว่าง User-Level และ Kernel-Level Thread
SN | เธรดระดับผู้ใช้ | เธรดระดับเคอร์เนล |
---|---|---|
1 | เธรดระดับผู้ใช้สร้างและจัดการได้เร็วกว่า | เธรดระดับเคอร์เนลจะสร้างและจัดการได้ช้ากว่า |
2 | การนำไปใช้โดยเธรดไลบรารีที่ระดับผู้ใช้ | ระบบปฏิบัติการรองรับการสร้างเคอร์เนลเธรด |
3 | เธรดระดับผู้ใช้เป็นเธรดทั่วไปและสามารถรันบนระบบปฏิบัติการใดก็ได้ | เธรดระดับเคอร์เนลเป็นเฉพาะสำหรับระบบปฏิบัติการ |
4 | แอปพลิเคชันแบบมัลติเธรดไม่สามารถใช้ประโยชน์จากการประมวลผลหลายขั้นตอนได้ | กิจวัตรของเคอร์เนลเองสามารถเป็นแบบมัลติเธรดได้ |