PlusMagi's Blog By Pitt Phunsanit Programming จัดการลำดับงาน Asynchronous, Synchronous

จัดการลำดับงาน Asynchronous, Synchronous

ในการเขียนโปรแกรมหรือการสื่อสารของระบบคอมพิวเตอร์ คำว่า Synchronous และ Asynchronous คือแนวคิดพื้นฐานที่กำหนดว่า “งานแต่ละอย่างจะถูกลำดับและจัดการอย่างไร” เพิ่มใช้ขึ้นมาในสมัยที่ CPU มันทีหลาย ๆ core เพื่อให้เห็นภาพชัดเจน เรามาเจาะลึกความแตกต่างของทั้งสองรูปแบบนี้กันครับ


Synchronous

Synchronous มาจากภาษากรีกที่แปลว่า “เกิดขึ้นพร้อมกันในเวลาเดียวกัน” ในบริบทของโปรแกรมมิ่ง หมายถึงการทำงานแบบ เป็นลำดับขั้นตอน

  • หลักการ: เมื่อคำสั่งหนึ่งเริ่มทำงาน โปรแกรมจะ “รอ” จนกว่าคำสั่งนั้นจะเสร็จสิ้นก่อน จึงจะเริ่มคำสั่งถัดไปได้
  • เปรียบเทียบ: เหมือนการต่อแถวซื้อกาแฟ คุณต้องรอให้คนข้างหน้าสั่งและรับของให้เสร็จก่อน คุณถึงจะได้เข้าไปสั่งเป็นคนถัดไป

ข้อดีและข้อเสีย

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

Asynchronous

Asynchronous คือการทำงานแบบ ไม่รอช้า โดยที่งานอื่น ๆ สามารถดำเนินต่อไปได้แม้ว่างานก่อนหน้าจะยังไม่เสร็จสิ้น

  • หลักการ: เมื่อสั่งงานหนึ่งไปแล้ว โปรแกรมจะไม่หยุดรอ แต่จะไปทำงานถัดไปทันที และเมื่อพองานที่สั่งไว้เสร็จแล้ว ระบบจะแจ้งเตือนกลับมา เพื่อจัดการผลลัพธ์นั้น
  • เปรียบเทียบ: เหมือนการไปกินร้านอาหารตามสั่ง คุณสั่งอาหารเสร็จแล้วไปนั่งเล่นมือถือรอ เมื่ออาหารเสร็จ พ่อครัวจะนำมาเสิร์ฟให้คุณเอง โดยที่คุณไม่ต้องยืนจ้องกระทะตลอดเวลา

ข้อดีและข้อเสีย

ข้อดีข้อเสีย
ระบบทำงานได้ลื่นไหล ไม่ค้าง โค้ดมีความซับซ้อนสูง
เหมาะกับงาน I / O เช่น การดึงข้อมูลจาก API หรือฐานข้อมูลการไล่หาข้อผิดพลาด ทำได้ยากกว่า

ตารางสรุปความแตกต่าง

คุณสมบัติSynchronousAsynchronous
ลำดับการทำงานทีละอย่างตามลำดับทำงานหลายอย่างขนานกันได้
สถานะการรอBlocking Non-blocking
ประสิทธิภาพต่ำกว่าในงานที่ต้องรอ I/Oสูงกว่ามากในงานที่ต้องรอ I/O
ความซับซ้อนต่ำสูง

ควรเลือกใช้ตอนไหน ?

  • ใช้ Synchronous เมื่อ
    • งานแต่ละขั้นตอนต้องใช้ผลลัพธ์จากขั้นตอนก่อนหน้าอย่างเคร่งครัด
    • งานมีขนาดเล็กและทำงานเสร็จในเวลาอันสั้นมากจนไม่คุ้มที่จะทำ Async
    • ต้องการความเรียบง่ายในการบำรุงรักษาโค้ด
  • ใช้ Asynchronous เมื่อ
    • มีการเชื่อมต่อกับเครือข่าย
    • มีการอ่าน/เขียนไฟล์ขนาดใหญ่
    • ต้องการให้ User Interface ของแอปพลิเคชันยังคงตอบสนองได้ตลอดเวลา ไม่เกิดอาการ “หน้าจอค้าง”

สรุปสั้น ๆ : ถ้าชีวิตคือการรีบทำทีละอย่างให้เสร็จนั่นคือ Sync แต่ถ้าคุณสามารถต้มมาม่าไปพร้อม ๆ กับคุยโทรศัพท์ได้ นั่นคือความมหัศจรรย์ของ Async ครับ!


อ่านเพิ่มเติม

Exit mobile version