Sobes.tech
Middle

Ce tipuri de cozi există în Grand Central Dispatch (GCD)?

sobes.tech AI

Răspuns de la AI

În GCD, sunt utilizate patru tipuri principale de cozi:

  1. Coada principală (Main Queue):

    • Coadă serială.
    • Folosită pentru executarea sarcinilor pe firul principal al aplicației (actualizări UI, gestionarea evenimentelor).
    • Există întotdeauna una pe aplicație.
  2. Cozi globale concurente (Global Concurrent Queues):

    • Cozi concurente.
    • Sunt furnizate de sistem.
    • Au diferite niveluri de prioritate a calității serviciului (Quality of Service - QoS).
    • Pot executa mai multe sarcini simultan.
  3. Cozi personalizate seriale (Custom Serial Queues):

    • Cozi seriale create de dezvoltator.
    • Execută sarcini în mod secvențial, una după alta.
    • Ideale pentru gestionarea accesului la resurse (sincronizare).
  4. Cozi personalizate concurente (Custom Concurrent Queues):

    • Cozi concurente create de dezvoltator.
    • Pot executa mai multe sarcini simultan.
    • Permite un control mai bun asupra executării sarcinilor comparativ cu coziile globale concurente.

Exemple de creare a coziilor:

// Coada principală
let mainQueue = DispatchQueue.main

// Una dintre coziile globale concurente (cu prioritate înaltă)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)

// Coadă serială personalizată
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")

// Coadă concurentă personalizată
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)

Priorități QoS pentru coziile globale:

Prioritate QoS Descriere
.userInteractive Sarcini legate de interfața utilizatorului (răspuns la clicuri).
.userInitiated Sarcini inițiate de utilizator (descărcarea conținutului la cerere).
.default Prioritate implicită, între .userInitiated și .utility.
.utility Sarcini lungi de fundal (descărcarea fișierelor).
.background Sarcini cu prioritate scăzută, independente de utilizator.
.unspecified Sistemul determină prioritatea.