Concurrency กับ Parallelism ต่างกันยังไง

สวัสดีคร้าบบบ วันนี้ได้มีโอกาสนั่งอ่านหนังสือ Elixir in Action ซึ่งเป็นหนังสือที่พูดถึง การเขียนโปรแกรมด้วยภาษา Elixir แล้วก็ไปเจอหัวข้อนึงเค้าพูดถึงเรื่องของ Concurrency กับ Parallelism ก็เลยสงสัยว่ามันแตกต่างกันยังไงวะสองตัวนี้ ก็เลยไปค้น ๆ หาข้อมูลในเว็บดูก็พบว่ามีคนถามเหมือนกัน
“What is the difference between concurrency and parallelism?”
คำตอบที่ผมเจอเนี่ยเป็นของคุณ Vicky Katara, Software Engineer at Amazon ในเว็ป Quora ซึ่งน่าสนใจทีเดียวเค้าพูดถึงความแตกต่างระหว่าง concurrency กับ parallelism โดยใช้การก่อกำแพงมาช่วยเปรียบเทียบแบบนี้ครับ

คุณ Vicky เนี้ย เขาก็บอกการสร้างกำแพงอิฐเนี้ย
แบบวิธีง่อย ๆ เลย คือสร้างทีละแถวโดยการวางอิฐ ฉาบปูน วางอิฐ รอให้ปูนแห้ง ถึงจะเริ่มฉาบปูนวางอิฐแถวต่อไป เมื่อสร้างแถวแรกเสร็จ ถึงจะเริ่มสร้างแถวที่สอง
ส่วนวิธี Concurrency เนี้ย “จะทำการสร้างกำแพงโดยนำ ก้อนอิฐมาวางเรียงกันทีละก้อน วางฝั่งซ้ายหนึ่งแถว ฉาบปูน ระหว่างที่รอปูนแห้ง ก็ย้ายไปทำฝั่งขวา พอวางอิฐที่ฝั่งขวา ฉาบปูนปุ้ป ระหว่างนั้นปูนฝั่งซ้ายแห้งพอดีก็กลับไปสร้างที่ฝั่งซ้ายต่อ ทำแบบนี้ไปเรื่อย ๆ จนเสร็จ ”
และแบบ Parallelism “คือการจ้างอีกคนมาช่วยกันสร้างกำแพง โดยการสร้างสองฝั่งพร้อมกัน วิธีนี้เป็นวิธีที่ดีที่สุด ประหยัดเวลาได้ตั้งครึ่งหนึ่งแหนะถ้าเทียบกับวิธีง่อย ๆ แต่ ก็ตามนั้น เร็วขึ้น แต่ต้องใช้คนถึงสองคนเลยทีเดียว”

Ref :
http://www.dietergalea.com/parallelism-concurrency/
https://www.quora.com/What-is-the-difference-between-concurrency-and-parallelism

