Sobes.tech
Middle

Main va globalda ishlatiladigan navbat turlari qanday?

sobes.tech AI

AIdan javob

Asosiy navbat (Main queue) - bu ketma-ket navbat (serial queue), u asosiy oqimda (main thread) ishlaydi. U foydalanuvchi interfeysini yangilash va UI voqealarini boshqarish uchun ishlatiladi. Asosiy navbatga yuborilgan barcha vazifalar qat'iy ketma-ket bajariladi.

Global navbatlar (Global queues) - bu tizim tomonidan taqdim etilgan parallel (bir vaqtning o'zida bajariladigan) navbatlar. Ular fon vazifalarini bajarish uchun ishlatiladi, bu UI bilan bog'liq bo'lmagan holda, asosiy oqimni bloklamaslik uchun. QoS (Service Quality) ning turli prioritetlariga ega bir nechta global navbatlar mavjud.

Mana QoS prioritetiga qarab asosiy global navbat turlari jadvali:

QoS Prioriteti Tavsifi Foydalanish misoli
userInteractive Eng yuqori prioritet. UI ning interaktivligi uchun darhol bajarilishi kerak bo'lgan vazifalar uchun ishlatiladi. Animatsiyalar, sensor voqealarini boshqarish.
userInitiated Yuqori prioritet. Foydalanuvchi tomonidan to'g'ridan-to'g'ri boshlatilgan va tez natijalar talab qiladigan vazifalar uchun ishlatiladi. Qidiruv natijalarini ko'rsatish, kontentni yuklash.
default Standart prioritet. userInitiated va utility orasida. Prioritet aniq ko'rsatilmagan vazifalar uchun.
utility O'rtacha prioritet. Uzoq davom etadigan va fon rejimida bajariladigan vazifalar uchun ishlatiladi. Fayl yuklash, ma'lumotlarni qayta ishlash.
background Past prioritet. Foydalanuvchi e'tiborini talab qilmaydigan fon vazifalari uchun ishlatiladi. Ma'lumotlarni sinxronlashtirish, zaxira nusxalarini yaratish.
unspecified Belgilanmagan prioritet. Tizim uni boshqa omillarga asoslangan holda belgilaydi. Kamdan-kam ishlatiladi.

Vazifani asosiy va global navbatga yuborish misoli:

DispatchQueue.main.async {
    // UI ni yangilash uchun kod
}

DispatchQueue.global(qos: .userInitiated).async {
    // Yuqori prioritet bilan fon vazifasini bajarish kodi
    // Bajarilgandan so'ng, UI ni yangilash uchun main navbatga qaytish kerak bo'lishi mumkin
    DispatchQueue.main.async {
        // Fon vazifasi tugagach, UI ni yangilash
    }
}