Sobes.tech
Middle

Kas ir Grand Central Dispatch un kā tas tiek izmantots iOS izstrādē?

sobes.tech AI

Atbilde no AI

Grand Central Dispatch (GCD) — zema līmeņa API daudzuzdevumu pārvaldībai, kas nodrošina sistēmas pavedienu baseinu un plāno to izpildi.

Galvenās GCD koncepcijas:

  • Dispatch rindas: Rindas, kurās tiek ievietoti koda bloki (uzdevumi) izpildei.
    • Sekvences rindas: Izpilda blokus pēc pievienošanas kārtības, pa vienam.
    • Konkurējošas rindas: Izpilda blokus paralēli, bet pēc pievienošanas kārtības.
  • Uzdevumi (bloki): Darba vienības, kas nosūtītas uz Dispatch rindām.
  • Dispatch avoti: Sistēmas notikumu uzraudzība (faili, soketi, signāli), kas izsauc bloku izpildi to rašanās gadījumā.

Izmantošanai:

  1. Fona operāciju izpilde: Datu ielāde no tīkla, attēlu apstrāde, sarežģīti aprēķini, lai neapturētu galveno pavedienu (UI).

    DispatchQueue.global(qos: .userInitiated).async {
        // Resursu intensīvas operācijas izpilde
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // UI atjaunināšana galvenajā pavedienā
            updateUI(with: processedData)
        }
    }
    
  2. Uzdevumu plānošana: Aizkavēta vai periodiska izpilde.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Šis kods tiks izpildīts pēc 2 sekundēm
        print("Aizkavēta izpilde")
    }
    
  3. Pieejas sinhronizācija datiem: Izmantojot sekvences rindas vai DispatchQueue.concurrentPerform, lai kontrolētu paralēlo piekļuvi.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // Izmanto .barrier ekskluzīvai piekļuvei rakstīšanai
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // Sinhronā lasīšana
            for item in sharedArray {
                print(item)
            }
        }
    }
    

Priekšrocības salīdzinājumā ar manuālu pavedienu pārvaldību (POSIX pavedieni):

  • Vienkāršība lietošanā: Augstāka līmeņa abstrakcija.
  • Efektivitāte: GCD efektīvāk pārvalda sistēmas pavedienu baseinu, samazinot overhead.
  • Mērogojamība: Automātiski pielāgojas procesora kodolu skaitam.

QoS (Pakāpes kvalitāte): Nosaka uzdevuma prioritāti GCD plānotājam.

QoS Lietojums
userInteractive UI atjauninājumi, animācijas, ātra reakcija
userInitiated Lietotāja iniciēti uzdevumi, kas prasa ātru pabeigšanu (ielāde, foto apstrāde)
default Noklusējuma prioritāte, starp userInitiated un utility
utility Ilgstoši izpildāmi uzdevumi bez steigas (ielāde, indeksēšana)
background Uzdevumi, kas nav redzami lietotājam (rezerves kopēšana, sinhronizācija fonā)
unspecified Prioritāte nav iestatīta, nosaka sistēma