Middle
Šta je Grand Central Dispatch i kako se koristi u razvoju iOS?
sobes.tech АИ
Одговор од АИ
Grand Central Dispatch (GCD) — niskonivojsko API za upravljanje višestrukim nitima, koje pruža skup sistemskih niti i planira izvršavanje zadataka na njima.
Osnovne koncepcije GCD:
- Dispatch Queue: Redovi u koje se smeštaju blokovi koda (zadaci) za izvršenje.
- Serijske Queue: Izvršavaju blokove u redosledu dodavanja, po jedan.
- Paralelne Queue: Izvršavaju blokove paralelno, ali u redosledu dodavanja.
- Zadaci (Blokovi): Jedinice rada koje se šalju u Dispatch Queue.
- Dispatch Sources: Monitoring sistemskih događaja (datoteke, soketi, signali), koji pozivaju izvršenje blokova pri njihovom nastanku.
Koristi se za:
-
Izvršavanje pozadinskih operacija: Učitavanje podataka sa mreže, obrada slika, složeni proračuni, kako ne bi blokirali glavni tok (UI).
DispatchQueue.global(qos: .userInitiated).async { // Izvršavanje zahtevne operacije let processedData = performHeavyProcessing() DispatchQueue.main.async { // Ažuriranje UI na glavnom thread-u updateUI(with: processedData) } } -
Planiranje zadataka: Odloženo izvršavanje ili periodično izvršavanje.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Ovaj kod će se izvršiti za 2 sekunde print("Odloženo izvršavanje") } -
Sinhronizacija pristupa podacima: Korišćenje serijskih queue ili
DispatchQueue.concurrentPerformza kontrolu paralelnog pristupa.let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent) var sharedArray = [Int]() func addItem(_ item: Int) { syncQueue.async(flags: .barrier) { // Korišćenje .barrier za ekskluzivan pristup pri pisanju sharedArray.append(item) } } func processItems() { syncQueue.sync { // Sinhrono čitanje for item in sharedArray { print(item) } } }
Prednosti u odnosu na ručno upravljanje nitima (POSIX niti):
- Jednostavnije korišćenje: Viši nivo apstrakcije.
- Efikasnost: GCD efikasnije upravlja skupom sistemskih niti, smanjujući troškove.
- Skalabilnost: Automatski se prilagođava broju jezgara procesora.
Tipovi QoS (Kvalitet usluge): Određuje prioritet zadatka za planera GCD.
| QoS | Primena |
|---|---|
| userInteractive | Ažuriranja UI, animacije, brza reakcija |
| userInitiated | Zadaci koje inicira korisnik, zahtevaju brzo završavanje (preuzimanje, obrada fotografija) |
| default | Podrazumevani prioritet, između userInitiated i utility |
| utility | Dugotrajni zadaci bez hitnosti (preuzimanje, indeksiranje) |
| background | Zadaci u pozadini, nevidljivi korisniku (rezervno kopiranje, sinhronizacija u pozadini) |
| unspecified | Prioritet nije postavljen, određuje ga sistem |