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. userInitiated və utility 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
}
}