# 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/>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aic-eec.com/computer-operation-systems/linux-os-dev.-engineer/posix-threads/multi-tasking-basic.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
