Junior
iOS dasturlash kontekstida GCD (Grand Central Dispatch) nima?
sobes.tech AI
AIdan javob
GCD (Grand Central Dispatch) — bu Apple tomonidan taqdim etilgan past darajali API bo‘lib, ilovalarda parallel operatsiyalarni boshqarish va kodni asinxron bajarishni ta’minlaydi. U vazifalarni bajarish uchun navbatlarga yuborish mexanizmini taqdim etadi, ular tizim tomonidan boshqariladi.
Asosiy xususiyatlar:
- Vazifa navbatlari (Dispatch Queues): FIFO tuzilmalar bo‘lib, ularga kod bloklari (closures) qo‘shiladi.
- Ular concurrent (parallel) va serial (ketma-ket) tiplarga bo‘linadi.
- Tizimning global navbatlarini taklif qiladi va foydalanuvchi navbatlarini yaratishga imkon beradi.
- Bloklar (Blocks): navbatlarga yuboriladigan ish birliklari.
- Threadlarni boshqarish: dasturchini to‘g‘ridan-to‘g‘ri threadlarni boshqarishdan ozod qiladi, tizim mavjud protsessor yadrolariga vazifalarni optimal tarzda taqsimlash imkonini beradi.
- Prioritetlar: tizimning global concurrent navbatlarida vazifalar uchun prioritet belgilash imkonini beradi.
Navbat turlari:
- Serial (ketma-ket): vazifalarni qat’iy ravishda birma-bir, ularning qo‘shilish tartibida bajaradi. Bu navbatdan faqat bitta vazifa har doim bajarilishini kafolatlaydi.
- Asosiy navbat (
DispatchQueue.main) UI yangilash uchun maxsus serial navbat. - Foydalanuvchi tomonidan yaratilgan serial navbatlar.
- Asosiy navbat (
- Concurrent (parallel): bir vaqtning o‘zida bir nechta vazifalarni bajarishi mumkin (parallel), bajarilish tartibi kafolatlanmaydi.
- Tizimning global concurrent navbatlari turli QoS (Xizmat Sifati) darajalari bilan.
- Foydalanuvchi tomonidan yaratilgan concurrent navbatlar.
Global concurrent navbatlar uchun QoS (Xizmat Sifati) darajalari:
| QoS Darajasi | Tavsifi | Foydalanish misollari |
|---|---|---|
userInteractive |
Foydalanuvchi bilan faol aloqada bo‘lgan vazifalar. | Animatsiyalar, UI voqealarini ishlash. |
userInitiated |
Foydalanuvchi tomonidan boshlagan va darhol natija talab qiladigan vazifalar. | Kontentni yuklash, tugma bosilganda. |
utility |
Uzoq davom etadigan va darhol natija talab qilmaydigan vazifalar. | Ma’lumotlarni yuklash, fon rejimida rasmni qayta ishlash. |
background |
Foydalanuvchidan yashirin fon vazifalari. | Keshni yangilash, ma’lumotlarni sinxronlashtirish. |
unspecified |
QoS darajasi ko‘rsatilmagan, tizim uni o‘zi belgilaydi. | Eski API yoki past darajali tizim vazifalari. |
Oddiy misol:
// Fon rejimida vazifa bajarish (global concurrent navbat)
DispatchQueue.global(qos: .userInitiated).async {
// Uzoq davom etadigan operatsiyani bajarish
print("Fon vazifasi bajarilmoqda")
// UI yangilash uchun asosiy threadga qaytish
DispatchQueue.main.async {
print("UI yangilash asosiy threadda")
}
}
GCD ko‘p threadli va parallel ishlashni soddalashtiradi, kodni o‘qilishi osonroq qiladi va past darajali thread boshqarish bilan solishtirganda race condition xatolariga kamroq moyil qiladi (Thread).