Notes & software courses · Free to learn
Aph's Blog
On this page

Concurrency vs Parallelism

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

เข้าใจความต่างของ "ทำสลับกัน" กับ "ทำพร้อมกันจริง" และเลือกเครื่องมือให้ถูกกับงาน

เมื่อโปรแกรมต้องทำหลายอย่าง การทำให้เร็วขึ้นด้วยการทำพร้อมกันเป็นทักษะสำคัญ แต่ "พร้อมกัน" มีหลายแบบ และเลือกผิดเครื่องมืออาจไม่เร็วขึ้นเลย หัวข้อนี้ปูพื้นให้เลือกถูก

Concurrency vs Parallelism

ConcurrencyParallelism
ความหมายสลับทำหลายงานทำหลายงานพร้อมกันจริง
เปรียบเทียบเชฟคนเดียวสลับทำหลายจานเชฟหลายคนทำคนละจาน
ต้องใช้งานสลับได้ (รอ I/O)หลาย CPU core

I/O-bound vs CPU-bound (ตัวกำหนดเครื่องมือ)

ก่อนเลือกเครื่องมือ ต้องรู้ว่างานของเราติดที่อะไร — รอข้อมูล (I/O) หรือคำนวณหนัก (CPU)

ชนิดงานติดที่ตัวอย่างเครื่องมือ
I/O-boundรอ network/ดิสก์เรียก API หลายตัว, อ่านไฟล์threading / asyncio
CPU-boundคำนวณหนักประมวลผลภาพ, คำนวณเลขเยอะmultiprocessing
เลือกผิดเครื่องมือ = ไม่เร็วขึ้น

งาน I/O-bound (รอเยอะ) ใช้ threading/asyncio ได้ผลดี เพราะระหว่างรอตัวหนึ่ง ทำตัวอื่นได้; แต่งาน CPU-bound ต้องใช้ multiprocessing เพราะ threading ใน Python ไม่ช่วย (เพราะ GIL — หัวข้อถัดไป) เข้าใจจุดนี้ก่อนเขียนโค้ด

สรุปหัวข้อนี้

  • concurrency = สลับทำ; parallelism = ทำพร้อมกันจริง (ต้องหลาย core)
  • I/O-bound (รอ network/ดิสก์) → threading / asyncio
  • CPU-bound (คำนวณหนัก) → multiprocessing
  • เลือกผิดชนิด = ไม่เร็วขึ้น (หรือช้าลง)
แบบฝึกหัด

1) จำแนกว่าเป็น I/O-bound หรือ CPU-bound: ดาวน์โหลด 100 ไฟล์ / คำนวณ prime ล้านตัว / อ่าน DB / resize รูป 1000 รูป 2) อธิบาย concurrency vs parallelism ด้วยตัวอย่างของตัวเอง 3) บอกว่างานในข้อ 1 ควรใช้เครื่องมือไหน