Controllo della concorrenza

La concorrenza è un modo per eseguire più di una cosa contemporaneamente. In un'applicazione, la concorrenza si riferisce a più attività in esecuzione contemporaneamente / contemporaneamente.

La concorrenza può rendere la tua applicazione più veloce, più pulita e offrire una migliore esperienza all'utente. L'uso del multithreading sembra difficile a molti sviluppatori, ma le API sono similiNSOperation e Dispatch Queues semplifica l'utilizzo della concorrenza e del multi-threading nell'applicazione.

Grand Central Dispatch

GCD è l'API più comunemente utilizzata per gestire codice concorrente ed eseguire operazioni in modo asincrono a livello di sistema. GCD fornisce e utilizza code di attività. Queste code sono la struttura dati che utilizza la terminologia FIFO, ovvero l'attività al primo posto in una coda verrà eseguita per prima e l'attività nell'ultima di una coda verrà eseguita alla fine.

Ad esempio: supponiamo una linea per la prenotazione di un biglietto del cinema, se sei l'ultima persona, riceverai il biglietto per ultimo e se qualcuno viene dopo di te, riceverà un biglietto dopo di te.

Coda di spedizione

Le code di invio sono un modo semplice per eseguire un'attività in modo asincrono e simultaneo nell'applicazione. Esistono due tipi di code:

  • Serial Queues - Memorizzano le attività in serie ed eseguono un'attività alla volta.

  • Concurrent Queues - Memorizzano le attività in serie ed eseguono un'attività alla volta.

Alcune delle funzioni utilizzate per creare o ottenere code sono:

dispatch_queue_create       
// create a serial or concurrent queue 
dispatch_queue_get_label     
// get the label of a given queue 
dispatch_get_main_queue   
// get the one and only main queue 
dispatch_get_global_queue    
// get one of the global concurrent queues

Aggiunta di attività alle code

Esistono due tipi di funzioni, che aiutano ad aggiungere attività alle code. Sono -

Synchronous Functions -

  • dispatch_once - invierà l'attività solo una volta terminata la durata dell'applicazione.

  • dispatch_sync - sottoporrà un'attività alla coda e tornerà solo quando l'attività sarà completata.

Asynchronous Functions -

  • Dispatch_async - invierà un'attività e tornerà.

  • Dispatch_after - ritorna immediatamente ma ritarda per un tempo determinato.

  • Dispatch_async - ritorna immediatamente ma l'attività viene inviata più volte.

Codice di esempio

Di seguito è riportato il codice di esempio per l'aggiunta di attività alla coda.

dispatch_async(dispatch_get_main_queue(), update_block);  
// add update_block to main queue  

dispatch_apply(i, some_queue, work_block)  
// add work_block to some_queue i times  

dispatch_sync(background_queue, blocking_block)  
// add blocking block to background queue and wait for completion

Esempio generale di utilizzo di una coda

Il codice seguente è un esempio di utilizzo di una coda.

dispatch_async(background_queue, ^ { 
   // Perform code that takes long time, here. 
   Dispatch_async(dispatch_get_main_queue(), ^ { 
      //Some other task, generally UI. 
   }); 
});

Questo è tutto ciò che faremo con il controllo della concorrenza, poiché sono informazioni sufficienti fino a quando non diventerai uno sviluppatore iOS intermedio.

Continua a praticare i concetti che hai imparato e cerca di modificarli e integrarli in base alle tue esigenze.