Multi-task and Multi-tread

ก่อนที่เราจะมาทำความรู้จัก Multi-task และ Multi tread เราต้องรู้จัก Multi processing เสียก่อน เริ่มจากความหมายของ multi processing

Multi processing คืออะไร

Multi processing คือการสั่งให้คอมพิวเตอร์ของเราสามารถประมวลผลสิ่งต่างๆได้พร้อมกันในเวลาเดียวกันเช่นเราสามารถเปิด web browser เล่นวีดีโอพร้อมกับเล่นเกมได้ไปพร้อมๆกัน ซึ่งเราสามารถแบ่งให้ทำงานหลายๆอย่างได้พร้อมกันโดยขึ้นอยู่กับจำนวน core และ จำนวน thread ของ CPU ที่สามารถรับได้
ตัวอย่างจำนวน core และ thread ของ CPU intel i5 Gen12
ยิ่งจำนวนของ core เยอะเราก็จะสามารถทำได้หลาย process มากยิ่งขึ้น โดยการทำงานหลาย process จะถูกแบ่งออกเป็นย่อยๆสองอย่างคือ
  • Multi-task
  • Multi-thread
ซึ่งทั้งสองอย่างจะมีความคล้ายคลึงกัน แต่จะมีสิ่งที่แตกต่างกันจะอธิบายลงในด้านล่างนี้

Multi-task

Multi task คือการที่เราต้องการจะทำงานหลายๆอย่างพร้อมกัน โดยที่งานเหล่านั้นจะเกี่ยวข้องหรือไม่เกี่ยวกันก็ได้ยกตัวอย่างเช่น เราเปิดคอมพิวเตอร์ของเราขึ้นมา ฟังเพลง เล่นเกม และ อัดวิดีโอไปด้วย จะเห็นได้ว่า ณ ตอนนี้ คอมพิวเตอร์ของเราได้ทำการ Run 3 task ขึ้นมาก็คือ
  • ฟังเพลง
  • เล่นเกม
  • อัดวีดีโอ
แต่ละ task ก็จะแบ่ง memory ใน CPU กันและทำการรันไปพร้อมๆกันทำให้เราทำงานได้หลากหลายขึ้นในเวลาเดียวกัน
ภาพการแบ่งการใช้ทรัพยากรณ์ของ CPU เพื่อทำ Task ต่างๆพร้อมๆกัน

Multi-thread

Multi thread คือการแบ่งตัวโปรแกรมย่อยเป็นส่วนต่างๆเพื่อแยกกันประมวลผลในเวลาเดียวกันโดยใช้ทรัพยากรที่ได้จากการจัดสรรค์มาจาก CPU ให้ทำใน task นั้นๆ เช่นถ้าเราเล่นเกม FPS เกมหนึ่ง เมื่อเราสั่งคำสั่งให้ยิงด้วยการคลิกเข้าไป CPU เราต้องเริ่มทำการประมวลผลดังนี้
  • ระบบคำนวณระยะยิง
  • คำนวณว่ายิงโดนเป้าหมายหรือไม่
  • คำนวณจำนวณ HP ที่ลดลงไป
  • แสดงผลกราฟฟิคแสง
  • เล่นเสียงปืนที่ยิงออกมา
จะเห็นได้ว่าการคลิกครั้งเดียวโปรแกรมจะต้องทำการรันฟังค์ชั่นมากมายในเวลาเดียวกัน ถ้าเราเขียนโปรแกรมแบบ single thread ธรรมดาจะทำให้เกิดความไม่สอดคล้องของภาพและเสียงได้ และยังใช้เวลาในการประมวลผลที่มาก กว่า
ภาพแสดงการแบ่ง Thread programming เพื่อลดระยะเวลาคำนวณทั้งหมด
จากภาพประกอบจะเห็นได้ว่าเมื่อแบ่งการคำนวณเป็นส่วนย่อยๆแล้วจะทำให้เราสามารถประมวลผลได้แบบขนานกัน ซึ่งก็คือหัวใจหลักของ multi thread เอง

ความเหมือนและแตกต่างระหว่าง Multi-task กับ Multi-thread

Multi task
Multi thread
จำนวน task ที่ทำได้ขึ้นอยู่กับความสามารถของ CPU
จำนวน thread ที่ขยายได้ขึ้นอยู่กับ CPU ที่กำหนดให้และยิ่ง thread เยอะยิ่งกินไฟเพิ่ม
เมื่อมีหลาย task, CPU จะสลับกันทำในแต่ละ task
เมื่อมีหลาย thread, CPU จะสลับกันทำในแต่ละ thread เช่นกัน
ในแต่ละ task จะใช้ memory ของใครของมัน
ในแต่ละ thread จะใช้ memory รวมกัน
Multi task จะใช้หลักการเดียวกับ multi processing (ทำหลายอย่างพร้อมกัน เพื่อให้ได้หลายผลลัพธ์)
Multi thread จะมีหลักการคล้ายกันกับ Multi processing แต่ไม่ใช่ (เพราะแบ่งทำหลายอย่างเพื่อให้ได้ผลลัพธ์เดียว)
ลำดับการทำ Multi task. CPU จะเป็นคนเรียงลำดับการทำก่อนหลังให้
ลำดับการทำ Multi thread. CPU ก็จะเป็นคนเรียงลำดับการทำก่อนหลังให้เช่นกัน
ความเร็วในการประมวลผลช้ากว่า Multi thread
ความเร็วในการประมวลผลเร็วกว่า Multi task
การปิด task ที่ไม่อยากใช้งานแล้วใช้เวลานานกว่า
การปิด threadที่ไม่อยากใช้งานแล้วใช้เวลาเร็วกว่า
มีการแบ่งแยกและป้องกันการใช้ memory ระหว่าง task โดยอัตโนมัติ
ต้องแบ่งแยกการใช้และลำดับการใช้ memory เองในโปรแกรม
เหมาะสำหรับพัฒนาโปรแกรมให้เร็วขึ้น
เหมาะสำหรับพัฒนา OS ให้เร็วขึ้น
อ้างอิง :