Sobes.tech
Junior

Cos'è una coda di Dispatch?

sobes.tech AI

Risposta dell'AI

La coda Dispatch è un oggetto leggero che invia compiti per l'esecuzione asincrona o sincrona in GCD (Grand Central Dispatch).

Tipi di code:

  1. Seriali (Serial): Eseguono i compiti in ordine, uno dopo l’altro.
  2. Concorrenti (Concurrent): Eseguono i compiti contemporaneamente (fino a quanto permette il sistema e i core disponibili).

Metodi per ottenere una coda:

  • Coda principale (Main Queue): Coda seriale associata al thread principale dell’applicazione (UI).
    let mainQueue = DispatchQueue.main
    
  • Code globali concorrenti (Global Concurrent Queues): Fornite dal sistema con diverse priorità QoS.
    let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
    
  • Code personalizzate: Possono essere sia seriali che concorrenti.
    let customSerialQueue = DispatchQueue(label: "com.example.mySerialQueue")
    let customConcurrentQueue = DispatchQueue(label: "com.example.myConcurrentQueue", attributes: .concurrent)
    

Invio di compiti:

  • async: Aggiunge un compito alla coda per l’esecuzione asincrona, senza bloccare il thread corrente.
    customSerialQueue.async {
        // Compito asincrono
    }
    
  • sync: Aggiunge un compito alla coda per l’esecuzione sincrona, bloccando il thread corrente fino al completamento.
    customSerialQueue.sync {
        // Compito sincrono
    }
    
    Usa sync con cautela, specialmente sulla coda principale, per evitare deadlock.

Applicazioni:

  • Eseguire compiti in background senza bloccare l’UI.
  • Gestire l’accesso alle risorse condivise (le code seriali servono per la sincronizzazione).
  • Parallelizzare i calcoli.