Middle
Quali tipi di code esistono in Grand Central Dispatch (GCD)?
sobes.tech AI
Risposta dell'AI
In GCD, ci sono quattro principali tipi di code:
-
Coda principale (Main Queue):
- Coda seriale.
- Usata per eseguire compiti sul thread principale dell'applicazione (aggiornamenti UI, gestione degli eventi).
- Ne esiste sempre una per applicazione.
-
Code concorrenti globali (Global Concurrent Queues):
- Code concorrenti.
- Fornite dal sistema.
- Hanno diversi livelli di priorità di qualità del servizio (Quality of Service - QoS).
- Possono eseguire più compiti contemporaneamente.
-
Code seriali personalizzate (Custom Serial Queues):
- Code seriali create dallo sviluppatore.
- Eseguono compiti in modo sequenziale, uno dopo l'altro.
- Ideali per gestire l'accesso alle risorse (sincronizzazione).
-
Code concorrenti personalizzate (Custom Concurrent Queues):
- Code concorrenti create dallo sviluppatore.
- Possono eseguire più compiti contemporaneamente.
- Permettono un migliore controllo dell'esecuzione dei compiti rispetto alle code concorrenti globali.
Esempi di creazione di code:
// Coda principale
let mainQueue = DispatchQueue.main
// Una delle code concorrenti globali (ad alta priorità)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)
// Coda seriale personalizzata
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")
// Coda concorrente personalizzata
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)
Priorità QoS per le code globali:
| Priorità QoS | Descrizione |
|---|---|
.userInteractive |
Compiti relativi all'interfaccia utente (risposta ai clic). |
.userInitiated |
Compiti avviati dall'utente (caricamento contenuti su richiesta). |
.default |
Priorità di default, tra .userInitiated e .utility. |
.utility |
Compiti lunghi in background (download di file). |
.background |
Compiti a bassa priorità, indipendenti dall'utente. |
.unspecified |
Il sistema determina la priorità. |