Sobes.tech
Junior

Ce este o coadă de Dispatch?

sobes.tech AI

Răspuns de la AI

Coada Dispatch este un obiect ușor care trimite sarcini pentru execuție asincronă sau sincronă în GCD (Grand Central Dispatch).

Tipuri de cozi:

  1. Seriale (Serial): Execută sarcinile strict în ordine, una după alta.
  2. Concurente (Concurrent): Execută sarcinile simultan (în limita permisă de sistem și de nucleele disponibile).

Moduri de obținere a unei cozi:

  • Coada principală (Main Queue): Coada serială legată de firul principal al aplicației (UI).
    let mainQueue = DispatchQueue.main
    
  • Cozi globale concurente (Global Concurrent Queues): Sunt furnizate de sistem cu diferite priorități QoS.
    let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
    
  • Cozi personalizate: Pot fi atât seriale, cât și concurente.
    let customSerialQueue = DispatchQueue(label: "com.example.mySerialQueue")
    let customConcurrentQueue = DispatchQueue(label: "com.example.myConcurrentQueue", attributes: .concurrent)
    

Trimiterea sarcinilor:

  • async: Adaugă o sarcină în coadă pentru execuție asincronă, fără a bloca firul curent.
    customSerialQueue.async {
        // Sarcină asincronă
    }
    
  • sync: Adaugă o sarcină în coadă pentru execuție sincronă, blocând firul curent până la finalizarea sarcinii.
    customSerialQueue.sync {
        // Sarcină sincronă
    }
    
    Folosiți sync cu precauție, mai ales pe coada principală, pentru a evita deadlock-urile.

Aplicații:

  • Executarea sarcinilor de fundal fără a bloca UI-ul.
  • Gestionarea accesului la resursele comune (cozile seriale sunt folosite pentru sincronizare).
  • Paralelizarea calculelor.