ในการเขียนโปรแกรมหรือการสื่อสารของระบบคอมพิวเตอร์ คำว่า Synchronous และ Asynchronous คือแนวคิดพื้นฐานที่กำหนดว่า “งานแต่ละอย่างจะถูกลำดับและจัดการอย่างไร” เพิ่มใช้ขึ้นมาในสมัยที่ CPU มันทีหลาย ๆ core เพื่อให้เห็นภาพชัดเจน เรามาเจาะลึกความแตกต่างของทั้งสองรูปแบบนี้กันครับ
Synchronous
Synchronous มาจากภาษากรีกที่แปลว่า “เกิดขึ้นพร้อมกันในเวลาเดียวกัน” ในบริบทของโปรแกรมมิ่ง หมายถึงการทำงานแบบ เป็นลำดับขั้นตอน
- หลักการ: เมื่อคำสั่งหนึ่งเริ่มทำงาน โปรแกรมจะ “รอ” จนกว่าคำสั่งนั้นจะเสร็จสิ้นก่อน จึงจะเริ่มคำสั่งถัดไปได้
- เปรียบเทียบ: เหมือนการต่อแถวซื้อกาแฟ คุณต้องรอให้คนข้างหน้าสั่งและรับของให้เสร็จก่อน คุณถึงจะได้เข้าไปสั่งเป็นคนถัดไป
ข้อดีและข้อเสีย
| ข้อดี | ข้อเสีย |
| เขียนโค้ดและทำความเข้าใจได้ง่าย | หากมีขั้นตอนใดใช้เวลานาน ทั้งระบบจะหยุดชะงัก |
| คาดเดาผลลัพธ์และลำดับเหตุการณ์ได้แม่นยำ | ประสิทธิภาพต่ำในงานที่ต้องรอคอยทรัพยากรภายนอก |
Asynchronous
Asynchronous คือการทำงานแบบ ไม่รอช้า โดยที่งานอื่น ๆ สามารถดำเนินต่อไปได้แม้ว่างานก่อนหน้าจะยังไม่เสร็จสิ้น
- หลักการ: เมื่อสั่งงานหนึ่งไปแล้ว โปรแกรมจะไม่หยุดรอ แต่จะไปทำงานถัดไปทันที และเมื่อพองานที่สั่งไว้เสร็จแล้ว ระบบจะแจ้งเตือนกลับมา เพื่อจัดการผลลัพธ์นั้น
- เปรียบเทียบ: เหมือนการไปกินร้านอาหารตามสั่ง คุณสั่งอาหารเสร็จแล้วไปนั่งเล่นมือถือรอ เมื่ออาหารเสร็จ พ่อครัวจะนำมาเสิร์ฟให้คุณเอง โดยที่คุณไม่ต้องยืนจ้องกระทะตลอดเวลา
ข้อดีและข้อเสีย
| ข้อดี | ข้อเสีย |
| ระบบทำงานได้ลื่นไหล ไม่ค้าง | โค้ดมีความซับซ้อนสูง |
| เหมาะกับงาน I / O เช่น การดึงข้อมูลจาก API หรือฐานข้อมูล | การไล่หาข้อผิดพลาด ทำได้ยากกว่า |
ตารางสรุปความแตกต่าง
| คุณสมบัติ | Synchronous | Asynchronous |
| ลำดับการทำงาน | ทีละอย่างตามลำดับ | ทำงานหลายอย่างขนานกันได้ |
| สถานะการรอ | Blocking | Non-blocking |
| ประสิทธิภาพ | ต่ำกว่าในงานที่ต้องรอ I/O | สูงกว่ามากในงานที่ต้องรอ I/O |
| ความซับซ้อน | ต่ำ | สูง |
ควรเลือกใช้ตอนไหน ?
- ใช้ Synchronous เมื่อ
- งานแต่ละขั้นตอนต้องใช้ผลลัพธ์จากขั้นตอนก่อนหน้าอย่างเคร่งครัด
- งานมีขนาดเล็กและทำงานเสร็จในเวลาอันสั้นมากจนไม่คุ้มที่จะทำ Async
- ต้องการความเรียบง่ายในการบำรุงรักษาโค้ด
- ใช้ Asynchronous เมื่อ
- มีการเชื่อมต่อกับเครือข่าย
- มีการอ่าน/เขียนไฟล์ขนาดใหญ่
- ต้องการให้ User Interface ของแอปพลิเคชันยังคงตอบสนองได้ตลอดเวลา ไม่เกิดอาการ “หน้าจอค้าง”
สรุปสั้น ๆ : ถ้าชีวิตคือการรีบทำทีละอย่างให้เสร็จนั่นคือ Sync แต่ถ้าคุณสามารถต้มมาม่าไปพร้อม ๆ กับคุยโทรศัพท์ได้ นั่นคือความมหัศจรรย์ของ Async ครับ!
อ่านเพิ่มเติม