Grand Central Dispatch nima va u iOS dasturlashda qanday ishlatiladi?
sobes.tech AI
AIdan javob
Grand Central Dispatch (GCD) — tizimli iplar ustida ishlash uchun past darajadagi API bo'lib, tizim iplarining havuzini ta'minlaydi va vazifalarni ularni bajarish uchun rejalashtiradi.
GCD ning asosiy tushunchalari:
- Dispatch navbatlari: Kod bloklari (vazifalar) uchun joylashtiriladigan navbatlar.
- Serial navbatlar: Qo'shilish tartibida, bittadan bajariladi.
- Concurrent navbatlar: Parallelda bajariladi, lekin qo'shilish tartibida.
- Vazifalar (Bloklar): Dispatch navbatlariga yuboriladigan ish birliklari.
- Dispatch manbalari: Tizim voqealarini (fayllar, soketlar, signallar) monitoring qilish, ularning yuzaga kelishi bilan bloklarni chaqirish.
Foydalanishi:
-
Orqa fon operatsiyalarini bajarish: Tarmoqdan ma'lumot yuklash, tasvirlarni qayta ishlash, murakkab hisoblashlar, asosiy oqimni (UI) bloklamaslik uchun.
DispatchQueue.global(qos: .userInitiated).async { // Resurslarni ko'p ishlatadigan operatsiyani bajarish let processedData = performHeavyProcessing() DispatchQueue.main.async { // UI ni asosiy oqimda yangilash updateUI(with: processedData) } } -
Vazifalarni rejalashtirish: Kechiktirilgan yoki davriy bajarish.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Bu kod 2 soniya ichida bajariladi print("Kechiktirilgan bajarish") } -
Ma'lumotlarga kirishni sinxronlashtirish: Serial navbatlar yoki
DispatchQueue.concurrentPerformyordamida parallel kirishni nazorat qilish.let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent) var sharedArray = [Int]() func addItem(_ item: Int) { syncQueue.async(flags: .barrier) { // Yozishda eksklyuziv kirish uchun .barrier dan foydalanish sharedArray.append(item) } } func processItems() { syncQueue.sync { // Synchronous o'qish for item in sharedArray { print(item) } } }
POSIX iplar bilan (thread) taqqoslaganda afzalliklar:
- Foydalanish osonligi: Yuqori darajadagi abstraktsiya.
- Samardorlik: GCD tizim iplar havuzini yanada samarali boshqaradi, xarajatlarni kamaytiradi.
- Kattalashtirish: Avtomatik ravishda protsessor yadro soniga moslashadi.
QoS turlari (Sifatli xizmat): GCD rejalashtiruvchisi uchun vazifaning ustuvorligini belgilaydi.
| QoS | Qo'llanilishi |
|---|---|
| userInteractive | UI yangilanishlari, animatsiyalar, tez javob |
| userInitiated | Foydalanuvchi tomonidan boshlatilgan, tez yakunlanishi kerak bo'lgan vazifalar (yuklash, rasmni qayta ishlash) |
| default | Standart ustuvorlik, userInitiated va utility o'rtasida |
| utility | Uzoq davom etadigan, shoshilinch bo'lmagan vazifalar (yuklash, indekslash) |
| background | Foydalanuvchiga ko'rinmaydigan vazifalar (zaxira nusxasi, fon sinxronizatsiya) |
| unspecified | Ustuvorlik belgilangan emas, tizim tomonidan aniqlanadi |