Swift GCD คือ?

Asynchronous? Synchronous? Multi threading? (Grand Central Dispatch)

Ton Attapong
Seekster Development
1 min readMay 25, 2019

--

Grand Central Dispatch?

GCD คือ low-level-api สำหรับการจัดการคำสั่งต่างๆที่ทำงานพร้อมๆกัน ซึ่งจะช่วยให้แอปของเราทำงานแบบมีประสิทธิภาพมากขึ้น ยกตัวอย่างเช่น บางครั้งเราอาจจะพบเจอกับปัญหา UI ไม่อัพเดทบ้าง UI อัพเดทช้าบ้าง ผมรู้นะว่าหลายๆคนเคยก็ใช้คำสั่งต่อไปนี้แก้ปัญหา ^^

ก่อนอื่นเรามารู้จักกับคำสั่งที่เราใช้ประจำกันดีกว่าครับ เริ่มด้วย

DispatchQueue

สำหรับ DispatchQueue คือ ตัวจัดการงานในรูปแบบของ Block Object โดยการทำงานของ DispatchQueue จะเป็นแบบ FIFO (First in - First out) มาก่อนทำก่อน มาทีหลังทำทีหลัง

.main

ส่วนนี้คือ Types of queues โดยจะแบ่งออกหลักๆอยู่ 2แบบด้วยกัน

  1. Main queue // ทำบน Main Thread
  2. Global queues // ทำบน Global queue โดยใช้การกำหนดลำดับความสำคัญของ queue ด้วย QOS (Quality-of-service)

เรามารู้จักกับ QOS (Quality-of-service) สักหน่อย

QOS

Quality-of-service คือลำดับความสำคัญ ซึ่งจะประกอบไปด้วย

  • userInteractive: ใช้เมื่อมีการอัพเดท animations, event handling, หรืออัพเดท User Interface ของเรา // main thread
  • userInitiated: ใช้เมื่อให้ user รอบางอย่างก่อนที่เราจะแสดงผลให้ user เห็น ยกตัวอย่างเช่น โหลดเนื้อหาของบางอย่างแล้วมาแสดงให้ user เห็น // high priority global queue
  • utility: ใช้เมื่อไม่ต้องการผลลัพท์แบบเร่งด่วน ตัวอย่างเช่น downloading หรือ importing data // low priority global queue.
  • background: ใช้เมื่อไม่ต้องการให้ user ทราบ เหมาะสำหรับโหลด Api ล่วงหน้า // background priority global queue.

ตัวอย่าง Code Global Queue

ต่อกันด้วย async เลยครับ หากมี Async ก็ต้องมี Sync เรามาไปดูกันเลยว่าทั้ง 2 คืออะไรและต่างกันยังไง

Async

Async (Asynchronous) คือการทำงานที่ไม่จำเป็นต้องรอให้งานก่อนหน้าเสร็จก่อนสามารถลงมือทำงานถัดไปได้เลย

Sync

Sync (Synchronous) คือการทำงานแบบเรียงลำดับ รองานแรกเสร็จก่อนงานถัดไปถึงจะเริ่มทำ

เรามาดูตัวอย่างกันสักนิด

เริ่มจาก Async

จาก code ด้านบนสังเกตว่า Queue1 ยังทำไม่เสร็จ Queue2 ก็เริ่มแล้ว

เรามาดูแบบ Sync กันบ้าง (เรียงคิว)

จาก code ด้านบนสังเกตว่า Queue1 ทำเสร็จแล้ว Queue2 ถึงจะเริ่ม

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

--

--