Middle
дар бораи навбатии глобалӣ дар барномаи бисёрсӯрохи iOS гап занед.
sobes.tech AI
Ҷавоб аз AI
Глобалӣ Queue (Global Queue) дар Grand Central Dispatch (GCD) — ин очередьҳои системӣ пешфарз мебошанд, ки барои ҳама барномаҳо дастрасанд. Онҳо Concurrent Queues мебошанд, яъне вазифаҳо дар онҳо метавонанд дар параллел дар шохаҳои гуногун иҷро шаванд.
Хусусиятҳои асосӣ:
- Намудҳо: Аз рӯи сатҳи сифати хизматрасонӣ (QoS - Quality of Service) фарқ мекунанд.
- QoS: Афзалиятро дар иҷрои вазифаҳо муайян мекунад, таъсир мерасонад ба он ки кадом вазифаҳо бояд зудтар иҷро шаванд.
- Параллелизм: Имкон медиҳад, ки вазифаҳои зиёдеро ҳамзамон иҷро кунад.
- Системӣ: Тартиб медиҳанд ва идора мекунанд системаи оператсионӣ.
Намудҳои глобалӣ Queue (ба сатҳи афзалият аз боло ба поён):
| Сатҳи QoS | Тавсиф |
|---|---|
userInteractive |
Вазифаҳое, ки мустақиман ба интерфейси корбар таъсир мерасонанд (анимацияҳо, ҳодисаҳо). |
userInitiated |
Вазифаҳое, ки корбар оғоз мекунад, аммо UI-ро монеъ намесозанд (боргирии мундариҷа). |
default |
Сатҳи пешфарз бе муайян кардани QoS. |
utility |
Вазифаҳое, ки вақти иҷро карданро талаб мекунанд, аммо фаврӣ нестанд (боргирии файлҳои калон). |
background |
Вазифаҳое, ки дар пасзамина иҷро мешаванд, барои корбар намоён нестанд (синхронизатсия кардани маълумот). |
unspecified |
Бегона истифода мешавад, вақте ки QoS муҳим нест. Баробар бо default. |
Дастрасӣ ба глобалӣ Queue:
// Дастрасӣ ба Queue бо сатҳи QoS муайян
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
// Дастрасӣ ба Queue пешфарз
let defaultQueue = DispatchQueue.global()
Истифодаи Queueҳои глобалӣ барои иҷрои вазифаҳо:
// Иҷрои асинхронӣ дар Queue пасзамина
DispatchQueue.global(qos: .background).async {
// Код дароз, ки UI-ро монеъ намекунад
}
// Иҷрои синхронӣ дар Queue (камтар маъмул барои Queueҳои глобалӣ)
DispatchQueue.global(qos: .userInitiated).sync {
// Код, ки бояд пеш аз идомаи ҷараёни ҳозира иҷро шавад
}
Мухим:
- Ҳеҷ гоҳ вазифаҳоро, ки мустақиман ба интерфейси корбар таъсир мерасонанд, дар Queueҳои глобалӣ иҷро накунед (ғайр аз
userInteractiveбарои амалиёти хеле зуд). Барои навсозии UI истифода баред Queue асосӣ (DispatchQueue.main). - Queueҳои глобалӣ барои иҷрои параллелӣ пешбинӣ шудаанд. Тартиби иҷрои вазифаҳо метавонад кафолат дода нашуда бошад.
- Вақте ки
sync-ро дар Queue глобалӣ истифода мекунед, ҷараёни ҳозира то анҷоми вазифа баста мешавад. Ин метавонад ба баста шудани UI оварда расонад, агар аз ҷараёни асосӣ даъват шавад.