หน่วยที่ 4. เทรด (Threads)
[แสดง image]

ปรับปรุง : 2549-12-13 (เพิ่ม sync)

บทนำ
ในอดีตการประมวลผลเป็นแบบ single thread ที่ CPU ถูกครอบครองโดย process ครั้งละ 1 process เท่านั้น แต่ปัจจุบันระบบปฏิบัติการยอมให้เป็นระบบ Multithreaded ซึ่งในแต่ละระบบปฏิบัติการมีรูปแบบแตกต่างกันไปเช่น Java, Windows, Linux หรือ Unix ในบางครั้งเราเรียก thread ว่า LWP (Light Weight Process) ซึ่งเป็นความสามารถพื้นฐานของ CPU ในการจัดสรร Thread ID, Program counter, Register set และ Stack ให้กับทุก ๆ Thread ส่วนในอดีตเราจะเรียกว่า Heavy weight process เพราะเป็นแบบ Single thread of control
4.1 ความหมายของ Threads
4.2 Multithreading Models
โปรแกรมในปัจจุบันออกแบบให้ทำงานแบบ Multithread เช่น web browser ซึ่งควบคุมรูปภาพ การดึงข้อมูลจากเครือข่าย หรือ Word ที่แสดงภาพ ในขณะที่รอรับคำสั่งจากแป้นพิมพ์ และตรวจสอบไวยกรณ์ เป็นต้น
1. Many-to-one model
หมายถึง Kernel thread 1 หน่วย กับ User thread หลายหน่วย เป็นการออกแบบที่จะยอมให้เพียง thread เดียวที่เข้าถึง kernel ในกรณีที่ thread ไป block system call จะทำให้ process ทั้งหมดถูก block ไปด้วย โดยโมเดลนี้ยอมให้สร้าง user thread ได้ตามต้องการ แต่ไม่สามารถประมวลผลได้พร้อมกัน เพราะยอมให้เข้าใช้ kernel thread ได้ครั้งละ thread เท่านั้น
2. One-to-one model
หมายถึง Kernel thread 1 หน่วย กับ User thread 1 หน่วย ซึ่งระบบปฏิบัติการจะยอมให้ thread อื่นประมวลผลได้เป็นระบบขนาน ที่ทำงานแบบมัลติโปรเซสเซอร์ มีการใช้หลักการนี้อยู่ในระบบปฏิบัติการ Windows ในปัจจุบัน โดยโมเดลนี้ต้องไม่ยอมให้สร้าง user thread มากเกินไป
3. Many-to-many model
หมายถึง โมเดลที่ลดข้อจำกัดของ 2 แบบแรก ผู้ใช้สามารถสร้าง user thread เท่าที่จำเป็น และสัมพันธ์กับ kernel thread ที่รับการทำงานแบบขนานในแบบมัลติโปรเซสเซอร์ เมื่อมี thread ที่ block system call ทาง kernel จะจัดเวลาให้ thread อื่นเข้ามาประมวลผลก่อนได้
    ข้อได้เปรียบ หรือประโยชน์ของ multithreaded (Benefits)
  1. การตอบสนอง (Responsiveness)
  2. การแชร์รีซอร์ส (Resource sharing)
  3. ความประหยัด (Economy)
  4. การเอื้อประโยชน์ของสถาบัตยกรรมมัลติโปรเซสเซอร์ (Utilization of multiprocessor architectures)

4.3 Threading Issues
4.4 Pthreads
4.5 ปฏิบัติการฝึกเขียน threading model
เพิ่มเติม 2549-12-13
โครงสร้างพื้นฐานการซิงโครไนซ์ (Synchronization)
(sync. การทำให้งาน 2 งาน ทำร่วมกันอย่างราบรื่น แต่ async. คือการทำงานของงานที่ไม่เกี่ยวเนื่องกัน)
1. Race Condition สภาพที่โปรเซสสามารถเข้าถึงทรัพยากรได้พร้อมกัน
2. Mutual Exclusion (MuTex) and Critical Region ซึ่งกันและกัน กันไม่ให้เข้า วิกฤต อนาเขต
3. วิธีแก้ปัญหา Mutual Exclusion with busi waiting 5 วิธี4. Sleep and walkup
5. Semaphore ของ Edsger Dijkstra 
คือตัวแปรป้องกันไม่ให้เกิดปัญหาการเข้าใช้ทรัพยากร
P() ใช้ทรัพยากร
V() คืนทรัพยากร
Init() กำหนดทรัพยากรให้เข้าใช้ได้
    P(Semaphore s) { wait until s > 0, then s := s-1; /* must be atomic once s > 0 is detected */ } V(Semaphore s) { s := s+1; /* must be atomic */ } Init(Semaphore s, Integer v) { s := v; }
6. Event Counter เกี่ยวข้องกับ 3 ปฏิบัติการคือ read() advance() เพื่อเพิ่มค่า await() เพื่อsleep 7. Monitor คือชุดของ procedure, variable, data structure รวมเป็น package เพื่อควบคุมการ sync. The Dinning Philosophers Problem คือปัญหาที่ตกลงกันไม่ได้ของนักปราชญ์ในโต๊ะอาหาร อาจทำให้คนใดคนหนึ่งต้องอดตายจากเงื่อนไขการใช้ส้อมทานอาหาร แต่ไม่มีโอกาสนั้นสำหรับบางคน ซึ่งแก้ปัญหาด้วยแนวคิดของ semaphore ได้

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223