Execution Thread
Execution Thread คืออะไร
หากพูดถึงคำว่า Thread ในบริบทของการประมวลผลหรือ Execution Thread จะหมายถึงหน่วยย่อยที่สุดของการทำงานที่โปรแกรมสามารถดำเนินการได้ (a single sequence stream of execution within a process) หรือก็คือ “ลำดับของการทำงานเดี่ยว” ภายในกระบวนการ (Process) หนึ่งๆ นั่นเอง แต่ละเธรดจะทำงานอย่างอิสระ แต่ยังคงใช้ทรัพยากร (เช่น หน่วยความจำ) ร่วมกันกับเธรดอื่นๆ ภายในโปรเซสนั้นๆ
(Thread ของ CPU ให้ดูความหมายที่นี่)
หน้าที่สำคัญ:
- การทำงานแบบ Multi-tasking ภายในโปรแกรมเดียว: ช่วยให้โปรแกรมสามารถทำงานหลายๆ อย่างพร้อมกันได้ในเวลาเดียวกัน โดยไม่ต้องสร้างหลายโปรเซส เช่น โปรแกรมประมวลผลคำที่สามารถพิมพ์งาน ตรวจสอบการสะกด และบันทึกไฟล์ไปพร้อมๆ กันได้
- เพิ่มประสิทธิภาพการทำงาน: ทำให้โปรแกรมตอบสนองได้ดีขึ้นและทำงานได้รวดเร็วขึ้น โดยเฉพาะในระบบ Multi-core processors
- การแบ่งงาน: ช่วยให้นักพัฒนาสามารถแบ่งงานใหญ่ๆ ออกเป็นส่วนย่อยๆ ที่ทำงานพร้อมกันได้ ทำให้โค้ดมีโครงสร้างที่ดีขึ้นและจัดการได้ง่ายขึ้น
- การประหยัดทรัพยากร: เธรดใช้ทรัพยากรน้อยกว่าเมื่อเทียบกับการสร้างโปรเซสใหม่ เนื่องจากเธรดใช้ทรัพยากรร่วมกันกับโปรเซสหลัก
เกร็ดน่ารู้:
- Thread vs. Process: ความแตกต่างที่สำคัญคือ Process แต่ละตัวมีพื้นที่หน่วยความจำและทรัพยากรของตัวเองแยกกัน ทำให้มีความเป็นอิสระและเสถียรภาพมากกว่า หาก Process หนึ่งล่ม อีก Process จะไม่ได้รับผลกระทบ ในขณะที่ Thread หลายๆ เธรดจะใช้ทรัพยากรของ Process เดียวกัน หากเธรดหนึ่งมีปัญหา อาจส่งผลกระทบต่อเธรดอื่นๆ ใน Process เดียวกันได้
- User-level Threads vs. Kernel-level Threads:
- User-level Threads: ถูกจัดการโดยไลบรารีของเธรดในพื้นที่ผู้ใช้ (User Space) โดยที่เคอร์เนลของระบบปฏิบัติการไม่ได้รับรู้ถึงเธรดเหล่านี้ การสลับเธรดจะทำได้เร็วกว่า แต่หากเธรดหนึ่งถูกบล็อก (เช่น รอ I/O) โปรเซสทั้งหมดจะถูกบล็อก
- Kernel-level Threads: ถูกจัดการโดยเคอร์เนลของระบบปฏิบัติการโดยตรง การสลับเธรดอาจช้ากว่า แต่หากเธรดหนึ่งถูกบล็อก เธรดอื่นๆ ในโปรเซสเดียวกันยังคงทำงานต่อไปได้
- Multi-threading: คือเทคนิคการเขียนโปรแกรมที่ใช้เธรดหลายๆ ตัว เพื่อให้โปรแกรมทำงานพร้อมกัน ซึ่งเป็นหัวใจสำคัญของการพัฒนาแอปพลิเคชันยุคใหม่ที่ต้องการประสิทธิภาพสูง
คำศัพท์ที่เกี่ยวข้อง:
- Process (โปรเซส): โปรแกรมที่กำลังทำงานอยู่ (an instance of a computer program that is being executed) แต่ละโปรเซสมีหน่วยความจำและทรัพยากรของตัวเอง
- Multi-tasking (มัลติทาสก์กิ้ง): ความสามารถของระบบปฏิบัติการในการรันหลายๆ โปรแกรมพร้อมกัน (หรือสลับการทำงานไปมาอย่างรวดเร็วจนเหมือนทำงานพร้อมกัน)
- Concurrency (การทำงานพร้อมกัน): การที่หลายงานสามารถเริ่มต้น, ดำเนินการ, และจบลงในช่วงเวลาเดียวกันได้ อาจจะสลับกันทำหรือทำพร้อมกันจริงๆ ก็ได้
- Parallelism (การทำงานแบบขนาน): การที่หลายงานทำงานพร้อมกันจริงๆ ในเวลาเดียวกัน มักจะเกิดขึ้นบนฮาร์ดแวร์ที่มีหลายคอร์/โปรเซสเซอร์
- Synchronization (การซิงโครไนซ์): กลไกที่ใช้ในการควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกันระหว่างเธรด เพื่อป้องกันปัญหาข้อมูลผิดพลาด (Data Inconsistency) เช่น Mutex, Semaphore
อุปกรณ์ที่เกี่ยวข้อง:
- CPU (Central Processing Unit): หน่วยประมวลผลกลาง ทำหน้าที่ประมวลผลคำสั่งของโปรแกรม ซึ่งรวมถึงการจัดการและสลับการทำงานของเธรด
- RAM (Random Access Memory): หน่วยความจำหลักที่ใช้ในการเก็บข้อมูลและคำสั่งของโปรแกรมที่กำลังทำงานอยู่ ซึ่งเธรดต่างๆ ในโปรเซสจะใช้ RAM ร่วมกัน
- Multi-core Processor (โปรเซสเซอร์แบบหลายคอร์): CPU ที่มีหลายหน่วยประมวลผลในตัวเดียว ทำให้สามารถรันเธรดหลายๆ ตัวแบบขนานกันได้จริง