Qutilar yordamida ko'p ipli ishlashni qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
iOSda ko'p ipli ishlashni amalga oshirish uchun navbatlardan foydalaniladi GCD (Grand Central Dispatch) yoki Operation Queues texnologiyalari bilan.
GCD (Grand Central Dispatch)
GCD — bu parallel vazifalarni boshqarish uchun past darajali C API bo'lib, u dispatcher navbatlaridan foydalanadi.
GCD asosiy tushunchalari:
- Dispatcher navbatlar (
Dispatch Queues): Kod bloklarini (vazifalarni) bajarishni boshqaradigan ma'lumotlar tuzilmalari. Ular ketma-ket (serial) yoki parallel (concurrent) bo'lishi mumkin. - Global parallel navbatlar (
Global Concurrent Queues): Tizim navbatlari, odatda mavjud bo'lib, ular prioritetga (qos - Quality of Service) qarab farqlanadi. - Asosiy navbat (
Main Queue): Bu ketma-ket navbat bo'lib, UI ning asosiy oqimiga bog'langan. Foydalanuvchi interfeysini yangilash uchun ishlatiladi.
GCDdan foydalanish misoli:
import Foundation
// Yuqori prioritetli global parallel navbatni olish
let globalQueue = DispatchQueue.global(qos: .userInitiated)
// Asosiy navbatni olish
let mainQueue = DispatchQueue.main
// Global navbatda vazifani asinxron bajarish
globalQueue.async {
// Uzun davom etadigan vazifani bajarish...
print("Fon oqimida bajarilmoqda")
// UI ni yangilash uchun asosiy navbatga o'tish (agar kerak bo'lsa)
mainQueue.async {
// UI ni yangilash...
print("Asosiy oqimda UI yangilanmoqda")
}
}
// Foydalanuvchi tomonidan yaratilgan ketma-ket navbatni yaratish va foydalanish
let serialQueue = DispatchQueue(label: "com.example.mySerialQueue")
serialQueue.async {
print("Ketma-ket navbatdagi 1 vazifa")
}
serialQueue.async {
print("Ketma-ket navbatdagi 2 vazifa") // 1 vazifadan keyin bajariladi
}
Operation Queues
Operation Queues — bu GCD ustidan yuqori darajali abstraktsiya bo'lib, Operation obyektlariga asoslangan.
Operation Queues asosiy tushunchalari:
- Operatsiyalar (
Operation): Bu vazifa birligini ifodalovchi obyektlar. UlarOperationning subclasslari bo'lishi mumkin (masalan,BlockOperation,URLSessionDownloadTask). Ular o'zaro bog'liqliklarni qo'llab-quvvatlaydi. - Operation navbatlari (
OperationQueue): BuOperationbajarilishini boshqaradigan obyekt. Ular maksimal bir vaqtning o'zida bajariladigan operatsiyalar sonini cheklash uchun sozlanishi mumkin (maxConcurrentOperationCount).
Operation Queuesdan foydalanish misoli:
import Foundation
// Operation navbatini yaratish
let operationQueue = OperationQueue()
// Ixtiyoriy: bir vaqtning o'zida bajariladigan operatsiyalar sonini cheklash
operationQueue.maxConcurrentOperationCount = 3
// Operatsiya yaratish
let operation1 = BlockOperation {
print("Operatsiya 1 bajarilmoqda")
// Vazifani bajarish...
}
let operation2 = BlockOperation {
print("Operatsiya 2 bajarilmoqda")
// Vazifani bajarish...
}
// Alternativ usul: blok bilan operatsiya yaratish
let operation3 = BlockOperation {
print("Operatsiya 3 bajarilmoqda")
// Vazifani bajarish...
}
// Yakuniy blokni qo'shish (completion block)
operation3.completionBlock = {
print("Operatsiya 3 tugadi")
}
// Bog'liqliklarni qo'shish (Operatsiya 2, 1dan keyin bajariladi)
operation2.addDependency(operation1)
// Operatsiyalarni navbatga qo'shish
operationQueue.addOperation(operation1)
operationQueue.addOperation(operation2)
operationQueue.addOperation(operation3)
// Operatsiyalar asinxron ravishda bajarila boshlaydi, mavjud iplar va bog'liqliklarga qarab
GCD va Operation Queues taqqoslamasi:
| Xususiyatlar | GCD (Grand Central Dispatch) | Operation Queues |
|---|---|---|
| Abstraktsiya darajasi | Past (C API) | Yuqori (Objective-C/Swift klasslari) |
| Vazifalarni boshqarish | Bloklar yoki funksiyalar | Operation obyektlari |
| Bog'liqliklar | Qo'lda boshqarish talab etiladi (masalan, DispatchGroup) |
addDependency yordamida ichki qo'llab-quvvatlash |
| Bekor qilish | Qiyin | Oson (cancel() metodidan foydalanish) |
| Holat | Aniq holat yo'q | Holatlarni qo'llab-quvvatlaydi (ready, executing, finished) |
| Kuzatuv | Qo'lda amalga oshiriladi | KVO (Key-Value Observing) yordamida qo'llab-quvvatlanadi |
| Murakkablik | Oddiy, bekor qilinmaydigan vazifalar uchun mos | Murakkab, bog'liq va bekor qilinadigan vazifalar uchun mos |
GCD va Operation Queues orasidan tanlov vazifaning xususiyatlariga bog'liq. GCD yengil va oddiy fon vazifalari uchun mos, Operation Queues esa bog'liqliklar va bekor qilish imkoniyatlari bilan murakkab vazifalar uchun afzalroq. Ko'p hollarda, Operation Queues GCD ustida quriladi.