Concomitanza con Grand Central Dispatch
Cos'è GCD?
Grand Central Dispatch è stato creato da Apple oltre 10 anni fa come astrazione per aiutare gli sviluppatori a scrivere codice multi-thread senza creare e gestire manualmente i thread.
Concorrenza significa che due attività possono essere avviate, eseguite e completate in intervalli di tempo sovrapposti. Esistono tre modi per ottenere la concorrenza in iOS, thread, code di invio e code di operazioni.
“Invece di eseguire direttamente il threading, utilizzi GCD per programmare le attività lavorative e il sistema le eseguirà per te, sfruttando al massimo le sue risorse. GCD si occuperà della creazione dei thread richiesti e pianificherà le tue attività su questi thread, spostando l'onere della gestione dei thread dallo sviluppatore al sistema.
Il più grande vantaggio di GCD è che non devi pensare alle risorse hardware quando scrivi il tuo codice concorrente.
"Tutte le code di spedizione sono strutture di dati first-in, first-out (FIFO), quindi le attività vengono sempre avviate nello stesso ordine in cui vengono aggiunte."
Ci sono fondamentalmente tre modi di concorrenza in iOS:
- fili
- code di spedizione
- code operative
“Lo svantaggio dei thread è che delegano allo sviluppatore l'onere di creare una soluzione scalabile. Devi decidere quanti thread creare e regolare quel numero in modo dinamico al variare delle condizioni. Inoltre, l'applicazione si assume la maggior parte dei costi associati alla creazione e alla manutenzione dei thread che utilizza.
NSThread* myThread = [[NSThread alloc] initWithTarget:self
selector:@selector(myThreadMainMethod:)
object:nil];
[myThread start];
"A DispatchQueueè un livello di astrazione in cima alla coda GCD che ti consente di eseguire attività in modo asincrono e contemporaneamente nella tua applicazione. Le attività vengono sempre eseguite nell'ordine in cui vengono aggiunte alla coda."
Coda seriale e coda simultanea
“Una coda di spedizione seriale esegue solo un'attività alla volta. Le code seriali vengono spesso utilizzate per sincronizzare l'accesso a un valore o una risorsa specifica per evitare che si verifichino corse di dati.
let serialQueue = DispatchQueue(label: "serialQueue")
serialQueue.async {
print("Task 1 started")
// Do some work..
print("Task 1 finished")
}
serialQueue.async {
print("Task 2 started")
// Do some work..
print("Task 2 finished")
}
Task 1 started
Task 1 finished
Task 2 started
Task 2 finished
let concurrentQueue = DispatchQueue(label: "concurrentQueue",
attributes: .concurrent)
concurrentQueue.async {
print("Task 1 started")
// Do some work..
print("Task 1 finished")
}
concurrentQueue.async {
print("Task 2 started")
// Do some work..
print("Task 2 finished")
}
Task 1 started
Task 2 started
Task 1 finished
Task 2 finished
“Una coda di operazione è l'equivalente Cocoa di una coda di spedizione simultanea ed è implementata dalla classe NSOperationQueue. A differenza delle code di spedizione, le code delle operazioni non si limitano all'esecuzione delle attività in ordine FIFO e supportano la creazione di complessi grafici dell'ordine di esecuzione per le tue attività.
NSOperationQueue* myQueue = [[NSOperationQueue alloc] init];
[myQueue addOperation:anOperation];
[myQueue addOperationWithBlock:^{
/* Do something. */
}];
La coda di invio principale è una coda seriale disponibile a livello globale che esegue attività sul thread principale dell'applicazione.
"Puoi iniziare a fare il lavoro pesante su una coda in background e tornare alla coda principale quando hai finito."
DispatchQueue.main.async {
self.tableView.reloadData()
}
Buona programmazione...

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































