Please enable JavaScript.
Coggle requires JavaScript to display documents.
บทที่ 4การจัดการเธรด - Coggle Diagram
บทที่ 4การจัดการเธรด
4.5 เธรดในระบบปฏิบัติการวินโดว์ เธรดใน Windows นั้นเป็นออบเจ็ต (เช่นเดียวกับโพรเซส) โดยที่โพรเซสจะเป็นส่วนประกอบที่
เกี่ยวข้องกับการใช้งานของผู้ใช้หรือ Application ที่ต้องการใช้ทรัพยากร
- สถานะ Standby เธรดได้รับการบริการจากซีพียูในอันดับถัดไปเมื่อซีพียูว่าง
- สถานะ Running เธรดกำลังทำงานในซีพียูและจะทำไปจนกว่าจะถูกดึงออก หรือถูกบล็อกใช้
เวลาที่กำหนดไว้หมด หรือเสร็จงาน
- สถานะ Ready เธรดได้ถูกคัดเลือกให้เข้าทำงาน โดยมีการจัดอันดับด้วย Priority
- สถานะ Waiting เธรดจะเข้าสู่สถานะรอเมื่อ
-
-
-
- Transition เธรดจะเข้าสู่สถานะนี้เมื่อการรอสิ้นสุดลงและพร้อมที่จะเข้าสู่สถานะ Runningแต่ทรัพยากรที่มันต้องการยังไม่มี(ระบบยังให้ไม่ได้)
- Terminated เธรดสามารถที่จะยุติการทำงานของตัวเอง หรือจากเธรดอื่น หรือเมื่อ Parentprocess ยุติการทำงาน
4.9 คลังข้อมูลการจัดการเธรด คลังข้อมูลการจัดการเธรด เป็นข้อกำหนดที่สร้างโดยโปรแกรมเมอร์ สำหรับการจัดสร้างและจัดการเกี่ยวกับเธรดโดยมีสองขั้นตอนในการทำงานคือ
- การเข้าถึงแหล่งของข้อมูลทั้งหมดในเนื้อที่ของผู้ใช้ โดยไม่ผ่าน Kernel ทุกค่าและทุกโครงสร้างข้อมูลของแหล่งข้อมูลในพื้นที่ของผู้ใช้
- การเข้าถึงเครื่องมือที่รับรองแหล่งของ Kernel โดยตรงด้วยระบบปฏิบัติการ การเรียกฟังก์ชันใน API แหล่งข้อมูลแบบธรรมดา
จะส่งผลใน System call ถึง Kernel
4.9.1 Pthreads Pthreads เป็นตัวพื้นฐานของ POSIX ( IEEE 103.1C ) เรียกได้ว่าเป็น API สำหรับการสร้างเธรดและสิ่งที่เกิดขึ้นในเวลาเดียวกัน เป็นตัวบ่งบอกถึงพฤติกรรมของเธรดโดยไม่ใช้เครื่องมือการออกแบบ
ระบบปฏิบัติการมักจะใช้เครื่องมือในงานที่ต้องการ
4.9.2 เธรดของระบบ Win32 วีธีการจะคล้าย ๆ Pthreads ในระบบอื่น ๆ เราจะรวมไปถึงเธรดระบบ Win32 ในโปแกรมภาษาซี
4.9.3 เธรดของระบบภาษาจาวา (Java Thread)เธรดเป็นรูปแบบแรกของการประมวลผลโปรแกรมในโปรแกรมจาวา และ ภาษาจาวาเป็นข้อกำหนดลักษณะของกลุ่มสมาชิกขนาดใหญ่ในการสร้างและจัดการเกี่ยวกับเธรดทุกโปรแกรมจาวา
ประกอบไปด้วยเธรดเดี่ยวขนาดเล็กทำการควบคุมอยู่
4.4 สถานะของเธรด
- Block เมื่อใดก็ตามที่เธรดตองรอใหเหตุการณใด ๆ เกิดขึ้น มันก็จะทำการบล็อกซึ่งก็จะทำให้มีการเก็บข้อมูลที่เกี่ยวข้อง
- Unblock เมื่อมีเหตุการณที่เธรดถูกบล็อก เธรดก็จะถูกนำไปเก็บไวใน Ready queue
- Spawn หมายถึงการที่โพรเซสตัวหนึ่งสร้างโพรเซสอีกตัวหนึ่งขึ้นมา
- Finish เมื่อเธรดสิ้นสุดการทำงานคาต่าง ๆ ก็จะถูกส่งคืนให้กับระบบภาพแสดงตัวอย่างของ
เธรดในระบบ Multithreading
-
4.8 รูปแบบของเธรดมีหลายระบบที่สนับสนุนทั้งเธรดสำหรับผู้ใช้และเธรดสำหรับระบบปฏิบัติการ ในรูปแบบที่แตกต่างกันในที่สุดแล้วเธรดของผู้ใช้และเธรดของ Kernel ก็ยังเชื่อมโยงกันอยู่ดี ในส่วนนี้สามารถพิสูจน์ความสัมพันธ์ซึ่งสามารถแบ่งออกเป็น 3 รูปแบบที่เป็นที่รู้จักกันโดยทั่วไป
4.8.2 รูปแบบ One-to-One รูป แบบ One-to-One เป็นรูปแบบที่ แต่ละเธรดสำ
หรับผู้ใช้ จะจับคู่กับเธรดสำหรับระบบปฏิบัติการ ในลักษณะ 1 ต่อ 1
4.8.3 รูปแบบ Many-to-Many รูปแบบ Many-to-Many เป็นรูปแบบที่อาจจะมีจำนวนเธรดสำหรับผู้ใช้ มากกว่าหรือเท่ากับจำนวนเธรดสำหรับระบบปฏิบัติการก็เป็นได้
4.8.1 รูปแบบ Many-to-One รูปแบบ Many-to-One เป็นรูปแบบที่ใช้เธรดสำหรับระบบปฏิบัติการ 1 หน่วย กับเธรดสำหรับผู้ใช้หลายหน่วย
4.2 ตัวอย่างการใช้เธรด
ออกเป็นโพรเซสที่ควบคุมหลาย ๆ เธรด เช่น โปรแกรมเว็บบราวเซอร์ที่มีเธรดหนึ่งในการแสดงรูปภาพหรือ
เขียนข้อความในขณะที่อีกเธรดหนึ่งกำลังดึงข้อมูลจากเน็ตเวิร์ค
ในสถานการณ์บางอย่างการทำงานแบบ Single อาจจะต้องการทำงานพร้อมกันหลาย ๆ งาน
เช่น web server ยอมรับสิ่งที่เครื่องลูกข่ายต้องการพวก Web page image sound
4.7 เธรดสำหรับผู้ใช้และเธรดสำหรับระบบปฏิบัติการ
เธรดสำหรับผู้ใช้ง่ายที่จะถูกสร้างและอาจถูกยกเลิกก่อนเข้าเธรดสำหรับระบบปฏิบัติการได้และเธรดสำหรับระบบปฏิบัติการรองรับเธรดสำหรับผู้ใช้และการปฏิบัติงาน
4.7.1 เธรดสำหรับผู้ใช้(User Thread) จะได้รับการสนับสนุนจาก Kernel ด้านบน และอยู่ในไลบรารีของเธรดในระดับของผู้ใช้ไลบรารียังสนับสนุนการสร้างเธรดการจัดเวลา และการจัดการเธรดโดยไม่ต้องได้รับการสนับสนุนจาก Kernel เนื่องจากไม่ต้องยุ่งเกี่ยวกับเธรดระดับผู้ใช้
4.7.2 เธรดสำหรับระบบปฏิบัติการ (Kernel Thread) ได้รับการสนับสนุนโดยตรงจากระบบปฏิบัติการ โดย Kernel จะสร้าง จัดเวลา และจัดการเธรดภายในพื้นที่ของ Kernel เอง
4.1 เธรด เธรด คือ หน่วยการทำงานย่อยที่อยู่ในโพรเซสที่มีการแบ่งปันทรัพยากรต่าง ๆในโพรเซสนั้น ๆ
โดยปกติโพรเซส ที่ มีเพียง 1 เธรด จะถูกเรีย กว่า Single thread หรือเรียกอีก ชื่อว่า Heavy Weight Process แต่ถ้า 1 โพรเซสมีเธรดหลายเธรดจะเรียกว่า
Light Weight Process (LWP) หรือ Multithread
เธรดคือ การเรียกใช้หน่วยประมวลผลให้เกิดประโยชน์สูงสุด เธรดทำให้การทำงานของโปรแกรมง่ายมีประสิทธิภาพและมีประโยชน์ต่อระบบที่มีหลายหน่วยประมวลผล (Multiprocessor)
หรือมีแกนประมวลผลหลายแกน (Multicore)
4.3 ความแตกต่างระหว่างโพรเซสกับเธรดถึงโครงสร้างของโพรเซส ที่มีกับเธรดอยู่หนึ่งตัว (Single Threaded Process model) ความหมายโดยทั่วไปของเธรด คือ "Light weight process" ซึ่งหมายถึงโพรเซสที่ใชทรัพยากร
อย่างพอเพียงโดยมีPCB มีเนื้อที่ใช้สอยสำหรับผู้ใช้ มีKernel stack และ User stack สำหรับจัดการกับข้อมูลต่างๆ ของ โพรเซส เมื่อมี
การประมวลผลในขณะที่โพรเซสกำลังประมวลผลอยู่รีจีสเตอร์ของโพรเซสจะถูกควบคุมโดยโพรเซสเองและรีจีสเตอร์เหลานี้จะถูกเก็บไว้ใช้งาน
4.10 การยกเลิกเธรด การยกเลิกเธรดเป็นการทำให้เธรดจบการทำงานก่อนที่จะเสร็จสมบูรณ์เช่นถ้ามีหลายเธรดค้นหา
ข้อมูลในฐานข้อมูลพร้อมกัน แล้วมีเธรดหนึ่งให้ผลลัพธ์ออกมาแล้วเธรดที่เหลือจะถูกยกเลิก
4.11 สรุป เธรด คือ การเรียกใช้หน่วยประมวลผลให้เกิดประโยชน์สูงสุด และทำให้การทำงานของโปรแกรมมีประสิทธิภาพมากขึ้นและมีประโยชน์ต่อระบบในปัจจุบันที่เป็น Multicoreเพราะสามารถเรียกใช้เธรด
หลาย ๆ เธรดได้พร้อม ๆ กันทั้งนี้เธรดของโพรเซสเดียวกันสามารถจะทำงานแตกต่างกัน แต่ยังมีความเกี่ยวข้องกันบางอย่างและต้องทำงานอยู่ภายใต้สภาพแวดล้อมเดียวกัน