Operating System : Process , Task & Thread —แบ่งย่อยค่อยทำทีละอย่าง
การแบ่งงานออกเป็นส่วนๆ ในโลกของการคำนวณและพัฒนาซอฟต์แวร์ ก็เฉกเช่นการจัดระเบียบชีวิตในแต่ละวัน หากต้องทำงานทุกอย่างพร้อมกัน ไม่แยกแยะลำดับเหลื่อมล้ำต่อสูงในความสำคัญหรือขอบเขตของงาน ยุ่งเหยิงและล่าช้าย่อมเกิดขึ้นอย่างมิอาจหลีกหลบ การแบ่งงานเป็นส่วนย่อยๆ ช่วยให้ สามารถจัดการสิ่งที่ซับซ้อนได้ง่ายขึ้น ความสับสนลดน้อยลง ทำให้หมดทั้งปวงดำเนินงานร่วมกันได้อย่างราบรื่น
จินตนาการถึงเช้าวันธรรมดาที่ต้องทำกิจกรรมต่างๆ เช่น อาบน้ำ เตรียมอาหารเช้า รีดเสื้อผ้า และเก็บของลงกระเป๋า หากทุกกิจกรรมถูกทำพร้อมกัน เช่น ต้มกาแฟขณะรีดเสื้อ หรืออาบน้ำขณะเตรียมอาหาร อาจทำให้เกิดความสับสน เช่น กาแฟล้นเตา เสื้อผ้าไหม้ หรือของสำคัญตกหล่น
การแบ่งเวลาและจัดลำดับงาน เช่น รีดเสื้อก่อน ต้มกาแฟระหว่างเตรียมอาหารเช้า และตรวจสอบของในกระเป๋าหลังเสร็จทุกอย่าง ช่วยให้ทุกงานสำเร็จได้อย่างมีประสิทธิภาพโดยไม่วุ่นวาย
ในโลกซอฟต์แวร์ก็เช่นเดียวกัน โปรแกรมที่เราพัฒนาขึ้นมักต้องทำงานที่หลากหลาย เช่น การคำนวณ การรับส่งข้อมูล และการแสดงผลบนหน้าจอ หากทุกอย่างทำงานในส่วนเดียวกัน โปรแกรมจะซับซ้อนและยากต่อการจัดการ ยิ่งไปกว่านั้น หากเกิดข้อผิดพลาดขึ้นในงานส่วนหนึ่ง งานทั้งหมดอาจต้องหยุดชะงัก
ดังนั้น การแบ่งงานออกเป็นส่วนๆ คือกุญแจสำคัญในการสร้างความเป็นระเบียบและเพิ่มประสิทธิภาพในระบบ หน่วยงานแต่ละส่วนสามารถทำงานได้อย่างอิสระ แต่ยังประสานงานกันเพื่อบรรลุเป้าหมายเดียวกัน ซึ่งนำไปสู่แนวคิดพื้นฐานของ Process, Thread และ Task ที่ช่วยให้ระบบปฏิบัติการและโปรแกรมสามารถจัดการงานที่ซับซ้อนหลายด้านได้อย่างมีประสิทธิภาพและเชื่อถือได้
Process : กระบวนการ
Process เป็นหน่วยการทำงานที่สำคัญในระบบปฏิบัติการ ซึ่งถือเป็นการแยกการทำงานของโปรแกรมออกเป็นส่วนย่อยๆ ที่สามารถทำงานพร้อมกันหรือแยกจากกันได้ ใน Process แต่ละตัวจะมีชุดคำสั่งที่ถูกกำหนดไว้เพื่อทำงานบางอย่าง และข้อมูลที่จำเป็นสำหรับการดำเนินงานเหล่านั้น เช่น ตัวแปรหรือค่าคงที่ที่โปรแกรมต้องการใช้งาน
Process เ มีลักษณะเป็นหน่วยที่สามารถทำงานแยกจากกันและไม่สามารถรบกวนกันเองได้ โดยระบบปฏิบัติการจะรับผิดชอบในการจัดสรรทรัพยากรที่จำเป็นสำหรับการทำงานของ Process เหล่านั้น เช่น CPU หน่วยความจำ (RAM) และอุปกรณ์อื่นๆ ที่ใช้ร่วมกัน Process แต่ละตัวจะได้รับการจัดสรรทรัพยากรในลักษณะที่ไม่สามารถเข้าถึงหรือแก้ไขข้อมูลของ Process อื่นได้ ทำให้การทำงานเป็นไปอย่างมีระเบียบและไม่เกิดความขัดแย้ง
Process ในระบบปฏิบัติการ (Operating System) เป็นหน่วยการทำงานที่มีความสำคัญอย่างยิ่ง เพราะเป็นกลไกที่ช่วยให้ระบบสามารถทำงานหลายๆ อย่างได้พร้อมกัน (Multitasking) โดย Process แต่ละตัวจะประกอบด้วยชุดคำสั่ง (Instructions) และข้อมูล (Data) ที่จำเป็นในการดำเนินการต่างๆ ให้สำเร็จ เช่น การคำนวณ การประมวลผลข้อมูล หรือการเข้าถึงทรัพยากรต่างๆ ในระบบ Process แต่ละตัวทำงานอย่างอิสระจากกันและไม่สามารถรบกวนหรือเข้าถึงข้อมูลของ Process อื่นได้ ซึ่งทำให้การทำงานของ Process มีความปลอดภัยและไม่เกิดการชนกัน (Conflicts) ของข้อมูล ตัวอย่างเช่น เมื่อโปรแกรมหนึ่งทำงานอยู่ ก็จะมีชุดคำสั่งและข้อมูลของตัวเองที่ทำงานภายใน Process นั้นๆ โดยไม่สามารถเข้าถึงข้อมูลหรือคำสั่งในโปรแกรมอื่นๆ ที่ทำงานอยู่ในระบบ
ระบบปฏิบัติการมีหน้าที่สำคัญในการจัดสรรทรัพยากรที่จำเป็นสำหรับ Process แต่ละตัว เพื่อให้ Process สามารถทำงานได้อย่างมีประสิทธิภาพและไม่เกิดปัญหาความขัดแย้ง ทรัพยากรหลักที่ระบบปฏิบัติการต้องจัดสรร ได้แก่ CPU ซึ่งเป็นหน่วยประมวลผลกลางที่ Process ใช้ในการคำนวณและประมวลผลข้อมูล ระบบปฏิบัติการจะใช้เทคนิคการจัดสรรเวลา CPU หรือที่เรียกว่า CPU Scheduling เพื่อแบ่งเวลาให้ Process ต่างๆ ได้ใช้ CPU อย่างเหมาะสมและยุติธรรม โดยการทำงานอาจสลับไปมาระหว่าง Process ต่างๆ เพื่อให้ทุก Process สามารถดำเนินการได้ต่อเนื่องแม้ว่าทรัพยากรจะมีจำกัด
นอกจากนี้ หน่วยความจำก็เป็นทรัพยากรสำคัญที่ระบบปฏิบัติการต้องจัดการอย่างมีประสิทธิภาพ Process จำเป็นต้องมีหน่วยความจำเพื่อใช้เก็บข้อมูล เช่น ตัวแปรหรือโครงสร้างข้อมูลต่างๆ ที่โปรแกรมใช้ในระหว่างการทำงาน ระบบปฏิบัติการจะจัดสรรพื้นที่หน่วยความจำให้เหมาะสมกับความต้องการของ Process แต่ละตัว โดยใช้เทคนิคต่างๆ เช่น Virtual Memory ซึ่งช่วยให้ Process ดูเหมือนมีหน่วยความจำเฉพาะของตัวเอง แม้ในความเป็นจริงหน่วยความจำจะถูกแบ่งปันและใช้งานร่วมกันในระบบ วิธีการเช่น Paging ก็ช่วยเพิ่มประสิทธิภาพในการจัดสรรหน่วยความจำ โดยแบ่งพื้นที่หน่วยความจำออกเป็นบล็อกเล็กๆ ที่สามารถจัดสรรหรือคืนให้ Process ได้ตามความต้องการ การจัดการทรัพยากรทั้ง CPU และหน่วยความจำอย่างมีประสิทธิภาพช่วยให้ Process ทำงานได้ราบรื่นและลดความขัดแย้งที่อาจเกิดขึ้นระหว่าง Process ต่างๆ ในระบบ
การจัดการกับ Process ในระบบปฏิบัติการจะทำให้การทำงานหลาย Process ในเวลาเดียวกัน (การทำงานแบบหลาย Process หรือ multitasking) เป็นไปได้อย่างมีประสิทธิภาพ ตัวอย่างเช่น ระบบปฏิบัติการสามารถสลับระหว่าง Process ต่างๆ โดยใช้เทคนิคที่เรียกว่า Context Switching เพื่อให้ Process ทั้งหมดได้ใช้เวลา CPU อย่างยุติธรรมและไม่เกิดการแย่งทรัพยากรกัน
นอกจากนี้ Process จะมีสถานะต่างๆ ซึ่งสะท้อนถึงความคืบหน้าของการทำงาน เช่น สถานะที่กำลังทำงาน (Running) รอการเข้าถึงทรัพยากร (Blocked) หรือพร้อมที่จะทำงาน (Ready) เมื่อ Process เสร็จสิ้นการทำงาน ระบบปฏิบัติการจะจัดการคืนทรัพยากรที่ถูกใช้ไปกลับสู่ระบบ เพื่อให้ Process อื่นๆ สามารถใช้ทรัพยากรเหล่านั้นได้
Process ในระบบปฏิบัติการสามารถสื่อสารกันได้ผ่านวิธีที่เรียกว่า Inter-Process Communication (IPC) โดยใช้เทคนิคต่างๆ เช่น การใช้ Pipe, Message Queue หรือ Shared Memory เพื่อแลกเปลี่ยนข้อมูลระหว่าง Process ซึ่งทำให้ระบบสามารถทำงานได้อย่างมีประสิทธิภาพและ Process ต่างๆ สามารถประสานงานกันได้แม้จะทำงานในลำดับที่แยกกัน
เมื่อผู้ใช้หรือโปรแกรมต้องการเรียกใช้งานโปรแกรมใหม่ ระบบปฏิบัติการจะทำการสร้าง Process ใหม่ผ่านเทคนิคต่าง ๆ เช่น fork() ซึ่งทำให้เกิด Process ลูกที่มีลักษณะเหมือนกับกระบวนยการแม่ แต่จะไม่คัดลอกข้อมูลทั้งหมดเพื่อประหยัดหน่วยความจำ ระบบปฏิบัติการจะมอบหมายหมายเลขประจำตัว (PID) ให้กับ Process นั้น เพื่อใช้ในการติดตามและควบคุมการทำงานของ Process ซึ่งมีทรัพยากรของตัวเอง เช่น หน่วยความจำและตัวแปรส่วนตัว ทำให้ไม่สามารถเข้าไปใช้ร่วมกับ Process อื่นได้ การทำลาย Process เกิดขึ้นเมื่อ Process เสร็จสิ้นการทำงาน หรือถูกยกเลิก ระบบปฏิบัติการจะคืนทรัพยากรที่ Process นั้นใช้ เช่น CPU time และหน่วยความจำ กลับสู่ระบบ
ระบบปฏิบัติการใช้เทคนิคการจัดสรรทรัพยากรเพื่อให้แต่ละ Process สามารถทำงานได้อย่างมีประสิทธิภาพ โดยใช้ CPU Scheduling เช่น Round-Robin, Priority Scheduling, หรือ Shortest Job First เพื่อแบ่งเวลา CPU ให้กับแต่ละ Process การจัดสรรหน่วยความจำสำหรับ Process นั้นจะใช้ Virtual Memory และเทคนิคต่าง ๆ เช่น Paging และ Segmentation เพื่อให้แต่ละ Process สามารถทำงานเหมือนมีหน่วยความจำของตัวเอง แม้ว่าจริง ๆ แล้วทรัพยากรของระบบจะจำกัดก็ตาม นอกจากนี้ ระบบปฏิบัติการยังใช้ Memory Protection เพื่อป้องกันไม่ให้ Process หนึ่งเข้าไปแก้ไขข้อมูลของ Process อื่น โดยระบบจะทำการจัดการหน่วยความจำให้มีความปลอดภัยและไม่เกิดข้อผิดพลาดจากการเข้าถึงข้อมูลที่ไม่เหมาะสม
เมื่อ Process ทำงาน ระบบปฏิบัติการจะบันทึกสถานะของ Process นั้นในแต่ละช่วงเวลา เช่น เมื่อ Process หยุดทำงานชั่วคราวเพื่อให้ Process อื่นได้ใช้ CPU, ระบบจะทำการบันทึกสถานะของ Process และทำการสลับไปทำงานกับ Process อื่นโดยใช้ Context Switching ซึ่งเป็นเทคนิคที่ช่วยให้ระบบสามารถจัดการกับ Process หลาย ๆ ตัวได้พร้อมกัน การสลับไปมาระหว่าง Process ต่าง ๆ เป็นการเพิ่มประสิทธิภาพในการใช้ CPU และทำให้ระบบสามารถให้บริการกับหลาย Process ในเวลาเดียวกันได้อย่างมีประสิทธิภาพ
การจัดการ Process ยังเกี่ยวข้องกับการจัดการทรัพยากรอย่างมีประสิทธิภาพ การสร้าง Process ใหม่จะถูกจัดการให้เป็นไปตามขั้นตอนที่ช่วยให้ระบบไม่เกิดปัญหาการใช้ทรัพยากรอย่างฟุ่มเฟือย เช่น การใช้ฟังก์ชัน exec() ซึ่งทำให้ Process เดิมถูกแทนที่ด้วยโปรแกรมใหม่ โดยไม่ต้องสร้าง Process ใหม่ทั้งหมด ซึ่งจะช่วยประหยัดทรัพยากรของระบบให้เกิดประโยชน์สูงสุด
Process ที่สิ้นสุดการทำงานแล้ว ระบบปฏิบัติการจะทำการลบ Process Control Block (PCB) และคืนทรัพยากรที่ใช้กลับสู่ระบบ เพื่อให้ระบบสามารถจัดสรรทรัพยากรเหล่านั้นให้กับ Process อื่น ๆ ที่ต้องการใช้ ใน Process นี้ ระบบปฏิบัติการจะตรวจสอบสถานะการทำงานของ Process เพื่อให้ Process ทั้งหมดได้รับการจัดสรรทรัพยากรอย่างเหมาะสม และ Process ที่เสร็จสิ้นการทำงานจะไม่ทำให้เกิดการรบกวนกับ Process อื่น
การทำงานของ Process จึงมีความซับซ้อนและเชื่อมโยงกันกับการจัดการทรัพยากรในระบบปฏิบัติการอย่างมาก โดยระบบปฏิบัติการจะทำหน้าที่เป็นผู้จัดการที่ดูแลการทำงานทั้งหมดของ Process ต่าง ๆ ที่กำลังทำงานในระบบ ทำให้คอมพิวเตอร์สามารถทำงานหลาย ๆ อย่างพร้อมกันได้อย่างมีประสิทธิภาพและไม่เกิดปัญหาจากการแย่งทรัพยากร
Process ในระบบมีการสื่อสารกันเรียกว่า Inter-Process-Communication (IPC) ซึ่งเป็นการที่ Process ต่าง ๆ ในระบบปฏิบัติการสามารถแลกเปลี่ยนข้อมูลกันได้โดยไม่รบกวนการทำงานของกันและกัน ซึ่งทำให้การทำงานร่วมกันในระบบที่มีหลาย Process เป็นไปได้อย่างมีประสิทธิภาพ เทคนิคที่ใช้ในการสื่อสารมีหลายรูปแบบ เช่น การใช้ Pipe ซึ่งช่วยให้ข้อมูลไหลจาก Process หนึ่งไปยังอีก Process หนึ่ง, Message Queues ที่เก็บข้อความจาก Process หนึ่งส่งไปยังอีก Process , Shared Memory ที่ Process หลายตัวสามารถเข้าถึงพื้นที่หน่วยความจำร่วมกันได้โดยตรง และ Semaphores ที่ควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกันเพื่อป้องกันปัญหาจากการแย่งทรัพยากร การใช้ IPC ทำให้ระบบสามารถจัดการกับทรัพยากรได้อย่างมีประสิทธิภาพและช่วยให้ Process ต่าง ๆ สามารถทำงานพร้อมกันได้โดยไม่เกิดปัญหาขัดแย้งกัน
Task : ภารกิจ
Task คือ หน่วยย่อยของงานในระบบปฏิบัติการที่จัดการและควบคุมภายในกระบวนการ ซึ่งแต่ละ task เป็นภารกิจหรือชุดคำสั่งที่ต้องทำในช่วงเวลาหนึ่ง โดยทำงานภายในกระบวนการเดียวกัน แต่จะได้รับการจัดสรรทรัพยากรจากระบบปฏิบัติการให้มีการทำงานพร้อมกันได้หลายๆ งาน ระบบปฏิบัติการจัดการการทำงานของ task โดยใช้เทคนิคต่าง ๆ เช่น Task Scheduling ที่ช่วยในการเลือกและจัดสรรทรัพยากรเพื่อให้ task ทำงานได้อย่างมีประสิทธิภาพ
เมื่อระบบปฏิบัติการจัดสรรทรัพยากรให้กับ task ต่าง ๆ จะมีการแบ่งเวลา CPU และทรัพยากรอื่น ๆ เช่น หน่วยความจำ เพื่อให้หลาย task สามารถทำงานพร้อมกันในระบบเดียวได้ โดยไม่กระทบกันหรือทำให้ระบบช้าลง โดยการทำงานนี้จะใช้เทคนิคการแบ่งเวลาอย่าง Time-Slicing และการจัดสรรทรัพยากรด้วยวิธีการต่าง ๆ เช่น Round-Robin หรือ Priority Scheduling เพื่อให้ระบบสามารถจัดการ task ได้อย่างยุติธรรมและมีประสิทธิภาพ
เมื่อมีหลาย task ที่ทำงานพร้อมกัน ระบบปฏิบัติการจะควบคุมการทำงานของ task โดยสลับการทำงานระหว่าง task ในช่วงเวลาที่กำหนด ซึ่งทำให้สามารถทำงานหลาย ๆ งานในเวลาเดียวกันได้ และการจัดการหน่วยความจำจะช่วยให้ task แต่ละตัวมีพื้นที่หน่วยความจำของตัวเองโดยไม่สามารถเข้าถึงพื้นที่ของ task อื่น ซึ่งป้องกันข้อผิดพลาดจากการเข้าถึงข้อมูลที่ไม่เหมาะสม
สถานะการทำงานของ task ในระบบปฏิบัติการมีความสำคัญในการควบคุมการทำงานและจัดสรรทรัพยากรอย่างมีประสิทธิภาพ โดยสถานะของ task จะบ่งชี้ถึงการดำเนินการของ task ณ ขณะนั้น และช่วยให้ระบบสามารถจัดการการทำงานของ task แต่ละตัวได้อย่างเหมาะสม สถานะหลัก ๆ ของ task ในระบบปฏิบัติการแบ่งออกเป็นหลายประเภท โดยส่วนใหญ่จะประกอบไปด้วย:
- Ready: เมื่อ task อยู่ในสถานะนี้ หมายถึง task พร้อมที่จะทำงานทันที และกำลังรอการจัดสรรเวลา CPU จากระบบปฏิบัติการเพื่อเริ่มทำงาน การอยู่ในสถานะนี้หมายความว่า task ได้รับทรัพยากรที่จำเป็น เช่น หน่วยความจำ และพร้อมที่จะได้รับการจัดการจาก Task Scheduler เพื่อให้ได้การทำงานในขั้นต่อไป
- Running: เมื่อ task กำลังทำงานอยู่ในขณะนั้น จะอยู่ในสถานะนี้ คือ task กำลังใช้เวลา CPU ที่ถูกจัดสรรมาเพื่อดำเนินการคำสั่งต่าง ๆ ในการประมวลผล โดยอาจจะทำงานเพียงบางส่วนแล้วถูกสลับไปยัง task อื่นเมื่อถึงเวลาหมด
- Blocked (หรือ Waiting): เมื่อ task อยู่ในสถานะนี้ หมายถึง task กำลังรอทรัพยากรหรือข้อมูลจากภายนอก เช่น การรอข้อมูลจากเซ็นเซอร์หรือการรอการตอบกลับจากอุปกรณ์ภายนอก เช่น การรอการเข้าถึงไฟล์ที่ยังไม่ถูกปลดล็อก หากไม่สามารถดำเนินการต่อได้จนกว่าจะได้รับทรัพยากรหรือข้อมูลที่ต้องการ Task จะถูกย้ายไปยังสถานะนี้ และระบบจะทำการสลับ task ไปทำงานกับ task อื่น ๆ ที่พร้อมทำงานอยู่ในระหว่างนี้
- Terminated (หรือ Completed): สถานะนี้หมายถึง task ได้ทำงานเสร็จสิ้นแล้ว และระบบปฏิบัติการจะทำการจัดการกับทรัพยากรที่ task ใช้งาน เช่น หน่วยความจำหรือเวลา CPU เมื่อ task เสร็จสิ้นการทำงานแล้ว ระบบจะเก็บข้อมูลที่เกี่ยวข้องกับ task นั้น ๆ และคืนทรัพยากรที่ถูกใช้ไปให้กับระบบเพื่อให้ task อื่น ๆ สามารถใช้ได้
- New: เมื่อ task ถูกสร้างขึ้นใหม่ แต่ยังไม่ได้เริ่มการทำงาน จะอยู่ในสถานะนี้ โดยระบบปฏิบัติการจะกำหนดการจัดสรรทรัพยากรสำหรับ task ในขั้นตอนถัดไปก่อนที่จะเปลี่ยนสถานะไปเป็น Ready เพื่อรอการทำงาน
- Zombie: สถานะนี้จะเกิดขึ้นเมื่อ task หรือกระบวนการทำงานเสร็จสิ้นแล้ว แต่ยังคงเหลือข้อมูลที่เกี่ยวข้องที่ต้องให้ระบบปฏิบัติการจัดการก่อนที่จะสามารถลบ task หรือกระบวนการนั้นออกจากระบบได้ เช่น การคืนทรัพยากรที่ task ใช้
- Suspended: ในบางระบบปฏิบัติการอาจมีสถานะที่ task ถูกระงับชั่วคราว เช่น ในกรณีที่ต้องการจัดการกับ task ที่มีความสำคัญสูงโดยการหยุดการทำงานของ task อื่น ๆ ก่อน โดย task ที่อยู่ในสถานะนี้จะไม่ได้รับเวลา CPU จนกว่าจะได้รับการปลดล็อกและย้ายไปยังสถานะ Ready
ระบบปฏิบัติการจะต้องคอยตรวจสอบสถานะของแต่ละ task เพื่อการจัดการและจัดสรรทรัพยากรที่เหมาะสม โดยจะมีการสลับระหว่างสถานะเหล่านี้อย่างมีประสิทธิภาพ โดยการใช้ Task Scheduler ที่คอยตรวจสอบสถานะ Ready Queue และ Blocked Queue เพื่อจัดการกับการทำงานของ task ต่าง ๆ ให้ระบบสามารถทำงานได้หลายงานพร้อมกันและมีประสิทธิภาพ
การจัดการ task ยังเกี่ยวข้องกับการคืนทรัพยากรเมื่อ task ทำงานเสร็จสิ้น ระบบปฏิบัติการจะทำการคืนทรัพยากรที่ใช้ไป เช่น หน่วยความจำและเวลา CPU กลับไปยังระบบเพื่อให้สามารถนำไปใช้กับ task อื่น ๆ ที่รออยู่ การคืนทรัพยากรเหล่านี้ช่วยให้ระบบทำงานได้อย่างมีประสิทธิภาพและไม่เกิดการสูญเสียทรัพยากรที่ไม่ได้ใช้งาน นอกจากนี้ ในกรณีที่ task เกิดข้อผิดพลาดหรือต้องยกเลิกการทำงานก่อนที่จะเสร็จสิ้น ระบบจะทำการยกเลิก task นั้นและทำการจัดการทรัพยากรที่ใช้ไป เช่น การปิดไฟล์หรืออุปกรณ์ที่ task นั้นใช้งาน เพื่อให้ทรัพยากรเหล่านี้สามารถนำไปใช้งานกับ task อื่น ๆ ได้ การทำความสะอาดทรัพยากรเหล่านี้เป็นการป้องกันไม่ให้ทรัพยากรถูกล็อกหรือค้างอยู่ในระบบ จึงทำให้ระบบสามารถทำงานหลาย ๆ task ได้อย่างราบรื่นและมีประสิทธิภาพ.
ตัวอย่างการทำงานร่วมกันของหลาย task ได้แก่ ระบบที่ต้องการคำนวณข้อมูลทางคณิตศาสตร์และติดต่อกับเซ็นเซอร์ ระบบปฏิบัติการจะจัดสรรเวลาและทรัพยากรให้กับ task ที่ทำงานในลักษณะนี้ ซึ่งอาจมี task ที่ทำการคำนวณ ผลการคำนวณที่ได้จะถูกแสดงผล หรือส่งออกไปยังอุปกรณ์ต่าง ๆ ขึ้นอยู่กับการประมวลผลของแต่ละ task
โครงสร้างของ task จึงประกอบด้วย การทำงานร่วมกันในระบบที่สามารถทำงานหลาย ๆ งานได้พร้อมกัน โดยแต่ละ task จะได้รับการจัดสรรทรัพยากรและเวลาที่เหมาะสมจากระบบปฏิบัติการ เพื่อให้การทำงานร่วมกันมีประสิทธิภาพสูงสุด โดยการแบ่งเวลา CPU และการจัดสรรหน่วยความจำให้กับ task แต่ละตัวตามลำดับความสำคัญ ทำให้การทำงานของหลาย task ในระบบทำงานได้อย่างสมบูรณ์
🚩 Thread : เธรด
Thread คือ หน่วยย่อยของการทำงานในกระบวนการ (process) ที่สามารถทำงานได้พร้อมกันหลาย ๆ งานภายในกระบวนการเดียวกัน โดยที่แต่ละ thread มีหน้าที่ในการประมวลผลหรือทำงานบางอย่างที่ถูกแบ่งออกจากงานหลักที่กระบวนการทำอยู่ ทั้งนี้หลาย ๆ thread สามารถทำงานในเวลาเดียวกันได้ ทำให้ระบบมีประสิทธิภาพที่ดีขึ้น เพราะสามารถจัดการหลายงานในเวลาเดียวกัน โดยไม่ต้องเริ่มต้นกระบวนการใหม่ทุกครั้ง
ในระบบคอมพิวเตอร์ เมื่อโปรแกรมทำงานในกระบวนการหนึ่ง กระบวนการนั้นจะมีทรัพยากร เช่น หน่วยความจำ, ตัวแปร, ฟังก์ชัน หรือข้อมูลที่ใช้ร่วมกันระหว่าง thread ทั้งหมดภายในกระบวนการเดียวกัน นี่คือข้อดีของ thread เพราะช่วยให้การแบ่งงานเป็นหลายส่วนทำได้โดยไม่ต้องใช้ทรัพยากรเพิ่มขึ้นมากมาย เช่น การสร้างกระบวนการใหม่ซึ่งจะต้องมีหน่วยความจำและการตั้งค่าใหม่ทั้งหมด
เพื่อให้เข้าใจง่ายๆ ลองนึกถึงกระบวนการเป็นเหมือนโรงงานที่มีเครื่องจักรหลายเครื่องทำงานอยู่ในสายการผลิต แต่ละเครื่องจักรทำงานแยกจากกัน เช่น เครื่องจักรหนึ่งอาจจะทำการประกอบชิ้นส่วน ในขณะที่อีกเครื่องจักรทำการตรวจสอบคุณภาพชิ้นส่วนเหล่านั้น โดยที่ทั้งสองเครื่องจักรทำงานในโรงงานเดียวกัน เครื่องจักรเหล่านี้คือ thread ที่ทำงานภายในกระบวนการเดียวกัน และมีการแชร์ทรัพยากร เช่น พื้นที่ในการทำงาน หรือฐานข้อมูลที่ใช้ร่วมกันในโรงงานนั้น
แม้ว่าทุก thread จะทำงานพร้อมกัน แต่ทั้งหมดจะยังคงอยู่ในกระบวนการเดียวกัน ซึ่งหมายความว่า thread ทุกตัวในกระบวนการจะสามารถเข้าถึงทรัพยากรร่วมกันได้ เช่น ข้อมูลที่โปรแกรมใช้งาน หรือฟังก์ชันต่างๆ โดยไม่ต้องสร้างกระบวนการใหม่ทั้งหมด การทำงานนี้จะช่วยให้มีประสิทธิภาพสูงกว่า เพราะไม่ต้องเสียเวลาหรือทรัพยากรในการสร้างกระบวนการใหม่
การทำงานของหลาย ๆ thread ในกระบวนการเดียวกันจะได้รับการจัดการจาก Thread Scheduler ซึ่งเป็นระบบภายในที่จัดสรรเวลาให้กับแต่ละ thread ในการใช้ CPU ทำให้การทำงานของหลาย thread สามารถทำได้พร้อมกันโดยไม่เกิดความขัดแย้งกัน ตัวอย่างเช่น หากมี thread ที่ต้องใช้ข้อมูลจากฐานข้อมูลเดียวกัน ระบบอาจใช้เทคนิคการควบคุมการเข้าถึงข้อมูล เช่น Mutex หรือ Semaphore เพื่อให้แต่ละ thread สามารถเข้าถึงข้อมูลนั้น ๆ ได้อย่างปลอดภัยและไม่เกิดการชนกันระหว่าง thread
การใช้ thread ยังช่วยให้โปรแกรมสามารถทำงานได้หลาย ๆ งานพร้อมกันในเวลาเดียวกันโดยไม่ต้องรอให้แต่ละงานเสร็จสิ้นก่อน ตัวอย่างเช่น โปรแกรมที่ต้องรับข้อมูลจากเครือข่าย, ประมวลผลข้อมูล, หรือจัดการกับอินพุตจากผู้ใช้ ทุกงานสามารถทำได้ในเวลาเดียวกัน โดยที่แต่ละ thread ทำหน้าที่เฉพาะและไม่มีการแย่งทรัพยากรกัน
ด้วยเหตุนี้ การใช้ thread จึงเป็นวิธีที่มีประสิทธิภาพในการทำให้โปรแกรมสามารถทำงานหลาย ๆ งานพร้อมกันในเวลาเดียวกัน โดยไม่ต้องรอให้งานหนึ่งเสร็จสิ้นก่อนที่จะเริ่มงานอื่น ทำให้ระบบทำงานได้เร็วขึ้นและมีประสิทธิภาพมากขึ้น

กล่าวโดยสรุป :
Process
กระบวนการ (Process) เหมาะสำหรับงานที่ต้องการแยกพื้นที่การทำงานอย่างสมบูรณ์ หรือที่เรียกว่าการทำงานแบบแยกส่วน (Isolation) ซึ่งหมายความว่าแต่ละกระบวนการจะมีพื้นที่หน่วยความจำและทรัพยากรของตัวเองที่ไม่สามารถเข้าถึงได้จากกระบวนการอื่น การใช้งานนี้จะเป็นประโยชน์สำหรับโปรแกรมที่ทำงานในลักษณะแยกกันโดยสิ้นเชิง เช่น การทำงานของเว็บเบราว์เซอร์ที่แต่ละแท็บอาจทำงานในกระบวนการ (Process) ที่แยกจากกัน หรือระบบฐานข้อมูลที่การทำงานของแต่ละฐานข้อมูลต้องแยกการจัดการออกจากกันอย่างชัดเจน การใช้ Process จึงช่วยเพิ่มความปลอดภัยและป้องกันการรบกวนระหว่างการทำงานของแต่ละโปรแกรมหรือโมดูล
Task
Task เป็นส่วนย่อยที่จัดการงานเฉพาะในโปรแกรมเดียวกัน ซึ่งแต่ละ Task อาจจะมีความเกี่ยวข้องกัน แต่จะไม่ซับซ้อนหรือใหญ่เกินไป โดยแต่ละ Task มักจะทำงานในบริบทเดียวกันหรือมีการแบ่งงานกันในโปรแกรมเดียวกัน ตัวอย่างเช่น โปรแกรมเกมที่อาจมี Task สำหรับการคำนวณการชนกันของวัตถุต่างๆ และอีก Task สำหรับการแสดงผลภาพหรือเสียงในเวลาเดียวกัน ทั้งสอง Task นี้มีความเกี่ยวข้องกันและทำงานร่วมกันในบริบทเดียวกัน แต่ไม่ได้แยกออกไปเป็นกระบวนการที่มีหน่วยความจำแยกจากกัน ซึ่งช่วยให้โปรแกรมสามารถทำงานได้อย่างมีประสิทธิภาพโดยไม่จำเป็นต้องแยกทรัพยากรไปเป็นหลายๆ กระบวนการ
Thread
Thread เป็นหน่วยการทำงานที่เล็กที่สุดในกระบวนการ (Process) ซึ่งสามารถทำงานพร้อมกันในหลายๆ Thread ภายในกระบวนการเดียวกัน โดยการแบ่งงานออกเป็นหลายๆ Thread จะช่วยเพิ่มประสิทธิภาพในการประมวลผล โดยเฉพาะในงานที่ต้องการให้ทำงานพร้อมกัน เช่น โปรแกรมที่ต้องประมวลผลข้อมูลหลายๆ ชุดในเวลาเดียวกัน ตัวอย่างเช่น ในโปรแกรมคำนวณทางวิทยาศาสตร์ที่ต้องคำนวณหลายๆ งานในเวลาเดียวกัน หรือในเกมที่ต้องการประมวลผลภาพและการเคลื่อนไหวของตัวละครในเวลาเดียวกัน การใช้ Thread จึงช่วยให้โปรแกรมสามารถทำงานได้เร็วขึ้น โดยไม่ต้องรอให้กระบวนการทำงานให้เสร็จสมบูรณ์ก่อนที่จะเริ่มงานอื่น
“ Unum magnum in multos parvos dividitur, methodo apta ad finem ”
“ Break the task, though pain may stay,
In the end, success will light the way ”
“ หนึ่งใหญ่แตกหลายย่อย ค่อยจัดเรียงลำดับความสำคัญ ผ่านขั้นตอนวิเคราะห์ เจาะจงใช้วิธีอันเหมาะสม กิจยากเย็นใด ก็มุ่งหมายให้สำเร็จได้ ”
Naturvirtus
XXII Ianuarius MMXXV