Middle
Grand Central Dispatch чист ва чӣ гуна дар таҳияи iOS истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
Тартибии марказии Гранд (GCD) — API-и пасти сатҳ барои идоракунии бисёрсоҳавӣ, ки пуле аз сӯрохиҳои системиро таъмин мекунад ва иҷрои вазифаҳоро дар онҳо нақша мебандад.
Концепсияҳои асосии GCD:
- Қатори фиристодан: Қаторҳое, ки блокҳои коди (вазифаҳоро) барои иҷро ҷойгир мекунанд.
- Қаторҳои силсилавӣ: Блокҳоро дар тартиби илова кардан, як ба як, иҷро мекунанд.
- Қаторҳои ҳамзамон: Блокҳоро параллелӣ иҷро мекунанд, аммо дар тартиби илова кардан.
- Вазифаҳо (Блокҳо): Ҳуҷҷатҳои кор, ки ба Қатори фиристодан фиристода мешаванд.
- Манбаъҳои фиристодан: Мониторинг кардани ҳодисаҳои системӣ (файлҳо, сӯрохиҳо, сигналиҳо), ки иҷрои блокҳоро дар вақти пайдоиши онҳо даъват мекунанд.
Истифода:
-
Иҷрои вазифаҳои пасзамина: Боргирии маълумот аз шабака, коркарди тасвирҳо, ҳисобҳои мураккаб, то ки сӯрохи асосӣ (UI) баста нашавад.
DispatchQueue.global(qos: .userInitiated).async { // Иҷрои амалиёти вазнин let processedData = performHeavyProcessing() DispatchQueue.main.async { // Навсозии UI дар сӯрохи асосӣ updateUI(with: processedData) } } -
Нақшабандии вазифаҳо: Иҷрои таъхиршуда ё иҷрои даврӣ.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Ин код пас аз 2 сония иҷро мешавад print("Иҷрои таъхиршуда") } -
Муносибати дастрасӣ ба маълумотро ҳамоҳанг кардан: Истифодаи қаторҳои силсилавӣ ё
DispatchQueue.concurrentPerformбарои назорати дастрасии параллелӣ.let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent) var sharedArray = [Int]() func addItem(_ item: Int) { syncQueue.async(flags: .barrier) { // Истифодаи .barrier барои дастрасии истисноӣ дар навишт sharedArray.append(item) } } func processItems() { syncQueue.sync { // Хондани синхронӣ for item in sharedArray { print(item) } } }
Бартарӣ нисбат ба идоракунии дастӣ дар сӯрохиҳо (POSIX threads):
- Осонтар истифода: Дар сатҳи баланди абстраксия.
- Самаранокӣ: GCD беҳтар менежмент мекунад пуле аз сӯрохиҳои системӣ, кам кардани хароҷот.
- Масштабшавандагӣ: Автоматӣ ба шумораи ядроҳои процессор мутобиқ мешавад.
Намудҳои QoS (сифати хизматрасонӣ): Маъно дорад, ки вазифа барои нақшакаш GCD афзалият дорад.
| QoS | Истифода |
|---|---|
| userInteractive | Навсозии UI, анимацияҳо, вокуниши зуд |
| userInitiated | Вазифаҳое, ки аз ҷониби корбар оғоз мешаванд, ва ниёз доранд ба анҷоми зуд (боргирӣ, коркарди аксҳо) |
| default | Афзалиятии пешфарзӣ, байни userInitiated ва utility |
| utility | Вазифаҳое, ки дарозмуддат иҷро мешаванд, бе таъҷилӣ (боргирӣ, индекссозӣ) |
| background | Вазифаҳое, ки дар пасзамина иҷро мешаванд, барои корбар намоён нест (нусхабардорӣ, ҳамоҳангсозӣ дар пасзамина) |
| unspecified | Афзалият муайян нашудааст, онро системаи муайян мекунад |