- Grand Central Dispatch (GCD) และ DispatchQueue
- Async/Await และการทำงานพร้อมกัน (concurrency) ที่มีโครงสร้าง (structured)
- Actors และบทบาท (role) ในการทำงานพร้อมกัน (concurrency)
- การยกเลิกงาน (Task cancellation) และลำดับความสำคัญ (priority)
ในช่วงไม่กี่ปีที่ผ่านมา ความต้องการการทำแอพประสิทธิภาพสูงและตอบสนองได้ทำให้การรับทำแอพสำรวจการทำงานพร้อมกันและการทำงานแบบคู่ขนาน (concurrency)ในการทำแอพ iOS Swift เป็นภาษาโปรแกรมที่ทรงพลังสำหรับทำแอพ iOS และ macOS มีเครื่องมือมากมายเพื่อจัดการกับการทำงานพร้อมกัน ทำให้การรับทำแอพสามารถทำแอพที่มีประสิทธิภาพและตอบสนองได้ง่ายขึ้น ในบทความนี้ เราจะเจาะลึกคุณลักษณะการทำงานพร้อมกันของ iOS Swift รวมถึง Grand Central Dispatch (GCD), DispatchQueue, async/await, การทำงานพร้อมกันที่มีโครงสร้าง, นักแสดง และการยกเลิกงานและลำดับความสำคัญ
1. Grand Central Dispatch (GCD) และ DispatchQueue
Grand Central Dispatch (GCD) เป็น API ระดับต่ำสำหรับจัดการการทำงานพร้อมกันใน iOS และ macOS GCD มอบวิธีที่มีประสิทธิภาพในการจัดการงานแบบอะซิงโครนัส ช่วยให้คุณสามารถกระจายงานผ่านหลายคอร์หรือโปรเซสเซอร์เพื่อปรับปรุงประสิทธิภาพของการทำแอพ
ที่แกนหลักของ GCD คือ DispatchQueue ซึ่งเป็นวัตถุที่จัดการการดำเนินการของงานตามลำดับการเข้าก่อนออกก่อน (FIFO) คุณสามารถสร้างอินสแตนซ์ DispatchQueue ด้วยคลาสและลำดับความสำคัญของบริการ (QoS) ที่แตกต่างกัน เพื่อให้แน่ใจว่างานที่มีลำดับความสำคัญสูงจะได้รับการดำเนินการก่อนงานที่มีลำดับความสำคัญต่ำกว่า
นี่คือตัวอย่างง่ายๆ ของการใช้ DispatchQueue:
let backgroundQueue = DispatchQueue(label: "com.example.background", qos: .background)
backgroundQueue.async {
// Perform time-consuming tasks
}
DispatchQueue.main.async {
// Update UI
}
2. Async/Await และการทำงานพร้อมกัน (concurrency) ที่มีโครงสร้าง (structured)
Swift 5.5 นำเสนอ async/await ซึ่งเป็นคุณสมบัติการทำงานพร้อมกันที่ทรงพลังและใช้งานง่าย ซึ่งช่วยลดความยุ่งยากในการทำแอพแบบอะซิงโครนัส ด้วย async/await คุณสามารถทำแอพแบบอะซิงโครนัสที่ดูเหมือนโค้ดซิงโครนัส ทำให้อ่านและเข้าใจได้ง่ายขึ้น
ฟังก์ชัน Async ถูกประกาศด้วยคีย์เวิร์ด ‘async’ และเรียกด้วยคีย์เวิร์ด ‘await’ เมื่อเรียกใช้ฟังก์ชัน async การดำเนินการจะถูกระงับจนกว่าฟังก์ชันจะส่งคืนผลลัพธ์ ทำให้งานอื่นๆ สามารถทำงานพร้อมกันได้
การทำงานพร้อมกันที่มีโครงสร้างทำให้มั่นใจได้ว่างานแบบอะซิงโครนัสได้รับการจัดการอย่างเหมาะสมและเสร็จสิ้นก่อนที่จะออกจากขอบเขตพาเรนต์ ซึ่งช่วยลดความจำเป็นในการใช้ปิรามิดโทรกลับและทำให้การจัดการข้อผิดพลาดง่ายขึ้น
นี่คือตัวอย่างการใช้ async/await:
func fetchImage() async -> UIImage {
// Fetch image asynchronously
}
async {
let image = await fetchImage()
// Process image and update UI
}
3. Actors และบทบาท (role) ในการทำงานพร้อมกัน (concurrency)
Actors ที่ได้รับการแนะนำใน Swift 5.5 เป็นรูปแบบใหม่ของการทำงานพร้อมกันแบบดั้งเดิมที่ช่วยจัดการสถานะที่ไม่แน่นอนที่ใช้ร่วมกันในลักษณะที่ปลอดภัยและมีประสิทธิภาพ แอคเตอร์ให้สิทธิพิเศษในการเข้าถึงสถานะภายในของพวกเขา เพื่อให้แน่ใจว่าไม่มีสองภารกิจที่สามารถแก้ไขสถานะพร้อมกันได้
นักแสดงสามารถมีเมธอดและคุณสมบัติเหมือนคลาส แต่เมธอดสามารถทำเครื่องหมายด้วยคีย์เวิร์ด ‘async’ ทำให้เป็นอะซิงโครนัสตามค่าเริ่มต้น คุณสามารถโต้ตอบกับอินสแตนซ์ของนักแสดงได้โดยการเรียกใช้เมธอด async ซึ่งจะดำเนินการตามลำดับ
actor TemperatureSensor {
private var temperature: Double = 0.0
func updateTemperature(newTemperature: Double) async {
self.temperature = newTemperature
}
func readTemperature() async -> Double {
return self.temperature
}
}
async {
let sensor = TemperatureSensor()
await sensor.updateTemperature(newTemperature: 72.5)
let currentTemperature = await sensor.readTemperature()
print("Current temperature: \(currentTemperature)")
}
4. การยกเลิกงาน (Task cancellation) และลำดับความสำคัญ (priority)
ในการทำงานพร้อมกันของ Swift สามารถสร้างและจัดการงานได้โดยใช้โครงสร้างงาน งานมีลำดับความสำคัญและสามารถยกเลิกได้หากจำเป็น ให้การควบคุมโดยละเอียดสำหรับการดำเนินการพร้อมกันของคุณ
ลำดับความสำคัญของงานจะกำหนดลำดับในการดำเนินการงาน คุณสามารถกำหนดลำดับความสำคัญของงานโดยใช้เมธอด ‘withPriority’
Task.withPriority(.high) {
// High-priority task
}
Task.withPriority(.low) {
// Low-priority task
}
การยกเลิกงานทำให้คุณสามารถหยุดงานได้หากไม่จำเป็นอีกต่อไป ซึ่งอาจช่วยประหยัดทรัพยากรและปรับปรุงประสิทธิภาพโดยรวมของแอปพลิเคชันของคุณ หากต้องการยกเลิกงาน คุณต้องตรวจสอบการยกเลิกภายในงานโดยใช้คุณสมบัติ ‘Task.isCancelled’
func performCancellableTask() async {
for i in 1...10 {
if Task.isCancelled {
print("Task cancelled")
return
}
print("Iteration \(i)")
await Task.sleep(1 * 1_000_000_000) // Sleep for 1 second
}
}
let task = Task {
await performCancellableTask()
}
// After 3 seconds, cancel the task
Task {
await Task.sleep(3 * 1_000_000_000)
task.cancel()
}
คุณสมบัติการทำงานพร้อมกัน (concurrency) ของ iOS Swift เช่น Grand Central Dispatch, DispatchQueue, async/await, การทำงานพร้อมกันที่มีโครงสร้าง, Actor และการจัดการงาน ช่วยให้การทำแอพมีเครื่องมือที่ทรงพลังและมีประสิทธิภาพในการทำแอพที่มีประสิทธิภาพสูงและตอบสนอง ด้วยการใช้ประโยชน์จากคุณสมบัติเหล่านี้ คุณสามารถทำแอพที่จัดการงานที่ซับซ้อนและใช้เวลานานได้อย่างง่ายดาย ทำให้มั่นใจได้ว่าผู้ใช้จะได้รับประสบการณ์ที่ราบรื่นและสนุกสนาน
ในขณะที่คุณสำรวจการทำงานพร้อมกันของ iOS Swift ต่อไป อย่าลืมทดลองใช้เทคนิคและวิธีการต่างๆ เพื่อค้นหาชุดค่าผสมที่ดีที่สุดสำหรับกรณีการใช้งานเฉพาะของคุณ ด้วยการเรียนรู้คุณลักษณะการทำงานพร้อมกันของ Swift อย่างเชี่ยวชาญ คุณจะสามารถรับทำแอพที่แข็งแกร่งและมีประสิทธิภาพสูงที่สร้างความพึงพอใจให้กับผู้ใช้ได้