> For the complete documentation index, see [llms.txt](https://docs.aic-eec.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aic-eec.com/computer-operation-systems/linux-os-dev.-engineer/posix-threads/multi-tasking-basic.md).

# Multi-tasking Basic

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

### Multi processing คืออะไร

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

<figure><img src="https://paper-attachments.dropbox.com/s_C76828DECC2A10B4AD7FC83CF4CD9E66C63F4032166BD478AEB40FE30C836762_1662962119598_image.png" alt=""><figcaption><p>ตัวอย่างจำนวน core และ thread ของ CPU intel i5 Gen12</p></figcaption></figure>

ยิ่งจำนวนของ core เยอะเราก็จะสามารถทำได้หลาย process มากยิ่งขึ้น โดยการทำงานหลาย process จะถูกแบ่งออกเป็นย่อยๆสองอย่างคือ

* Multi-task
* Multi-thread

ซึ่งทั้งสองอย่างจะมีความคล้ายคลึงกัน แต่จะมีสิ่งที่แตกต่างกันจะอธิบายลงในด้านล่างนี้<br>

### Multi-task

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

* ฟังเพลง
* เล่นเกม
* อัดวีดีโอ

แต่ละ task ก็จะแบ่ง memory ใน CPU กันและทำการรันไปพร้อมๆกันทำให้เราทำงานได้หลากหลายขึ้นในเวลาเดียวกัน

<figure><img src="https://paper-attachments.dropbox.com/s_C76828DECC2A10B4AD7FC83CF4CD9E66C63F4032166BD478AEB40FE30C836762_1662969679605_+1.png" alt="" width="375"><figcaption><p>ภาพการแบ่งการใช้ทรัพยากรณ์ของ CPU เพื่อทำ Task ต่างๆพร้อมๆกัน</p></figcaption></figure>

### Multi-thread

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

* ระบบคำนวณระยะยิง&#x20;
* คำนวณว่ายิงโดนเป้าหมายหรือไม่&#x20;
* คำนวณจำนวณ HP ที่ลดลงไป&#x20;
* แสดงผลกราฟฟิคแสง&#x20;
* เล่นเสียงปืนที่ยิงออกมา&#x20;

จะเห็นได้ว่าการคลิกครั้งเดียวโปรแกรมจะต้องทำการรันฟังค์ชั่นมากมายในเวลาเดียวกัน ถ้าเราเขียนโปรแกรมแบบ single thread ธรรมดาจะทำให้เกิดความไม่สอดคล้องของภาพและเสียงได้ และยังใช้เวลาในการประมวลผลที่มาก กว่า

<figure><img src="https://paper-attachments.dropbox.com/s_C76828DECC2A10B4AD7FC83CF4CD9E66C63F4032166BD478AEB40FE30C836762_1662972355147_Multi_single+thread.png" alt=""><figcaption><p>ภาพแสดงการแบ่ง Thread programming เพื่อลดระยะเวลาคำนวณทั้งหมด</p></figcaption></figure>

จากภาพประกอบจะเห็นได้ว่าเมื่อแบ่งการคำนวณเป็นส่วนย่อยๆแล้วจะทำให้เราสามารถประมวลผลได้แบบขนานกัน ซึ่งก็คือหัวใจหลักของ 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 ให้เร็วขึ้น                                       |

อ้างอิง :&#x20;

<https://www.geeksforgeeks.org/difference-between-multi-tasking-and-multi-threading/>
