Sobes.tech
Middle

Main və globalda istifadə olunan növbə növləri hansılardır?

sobes.tech Süni İntellekt

AI-dan cavab

Əsas növbə (Main queue) tətbiqin əsas axınında (main thread) işləyən ardıcıl (serial queue) növbəsidir. İstifadəçi interfeysini yeniləmək və UI hadisələrini işləmək üçün istifadə olunur. Əsas növbəyə göndərilən bütün tapşırıqlar dəqiq ardıcıllıqla icra olunur.

Qlobal növbələr (Global queues) sistem tərəfindən təmin olunan paralel (concurrent queues) növbələrdir. Onlar UI ilə əlaqəli olmayan fon tapşırıqlarını yerinə yetirmək üçün istifadə olunur və bu, əsas iş parçacığının bloklanmasının qarşısını alır. QoS (Xidmətin keyfiyyət) müxtəlif prioritetlərə malik bir neçə qlobal növbə mövcuddur.

Budur QoS prioritetinə görə əsas qlobal növbələrin əsas növü cədvəli:

QoS Prioriteti Təsviri İstifadə nümunəsi
userInteractive Ən yüksək prioritet. UI-nin interaktivliyi üçün dərhal yerinə yetirilməli olan tapşırıqlar üçün istifadə olunur. Animasiya, toxunma hadisələrinin işlənməsi.
userInitiated Yüksək prioritet. İstifadəçi tərəfindən birbaşa başlanılan və sürətli nəticələr tələb edən tapşırıqlar üçün istifadə olunur. Axtarış nəticələrinin göstərilməsi, məzmunun yüklənməsi.
default Standart prioritet. userInitiatedutility arasında. Prioritet açıq şəkildə göstərilməyən tapşırıqlar üçün.
utility Orta prioritet. Uzunmüddətli və fon rejimində yerinə yetirilən tapşırıqlar üçün istifadə olunur. Fayl yükləmə, məlumatların emalı.
background Aşağı prioritet. İstifadəçi diqqətini tələb etməyən fon tapşırıqları üçün istifadə olunur. Məlumatların sinxronizasiyası, ehtiyat nüsxə çıxarılması.
unspecified Təyin olunmamış prioritet. Sistem onu digər amillərə əsasən müəyyən edir. Çox nadir hallarda istifadə olunur.

Tapşırığı əsas və qlobal növbəyə göndərmək nümunəsi:

DispatchQueue.main.async {
    // UI-ni yeniləmək üçün kod
}

DispatchQueue.global(qos: .userInitiated).async {
    // Yüksək prioritetli fon tapşırığını yerinə yetirmək üçün kod
    // Tamamlandıqdan sonra UI-ni yeniləmək üçün main növbəsinə qayıtmaq lazım ola bilər
    DispatchQueue.main.async {
        // Fon tapşırığı tamamlandıqdan sonra UI-ni yeniləmək
    }
}