Contrôle de la concurrence

La concurrence est un moyen d'exécuter plus d'une chose en même temps. Dans une application, la concurrence fait référence à plusieurs tâches s'exécutant en même temps / simultanément.

La concurrence peut rendre votre application plus rapide, plus propre et offre une meilleure expérience à l'utilisateur. L'utilisation du multithreading semble difficile pour de nombreux développeurs, mais les API sont commeNSOperation et Dispatch Queues facilite l'utilisation de la concurrence et du multi-threading dans l'application.

Expédition Grand Central

GCD est l'API la plus couramment utilisée pour gérer le code simultané et exécuter des opérations de manière asynchrone au niveau du système. GCD fournit et utilise des files d'attente de tâches. Ces files d'attente sont la structure de données qui utilise la terminologie FIFO, c'est-à-dire que la tâche en premier lieu dans une file d'attente sera exécutée en premier et la tâche en dernier d'une file d'attente sera enfin exécutée.

Par exemple - Supposons une ligne de réservation de billets de cinéma, si vous êtes la dernière personne, vous obtiendrez le dernier billet, et si quelqu'un vient après vous, il obtiendra un billet après vous.

File d'attente d'expédition

La file d'attente de répartition est un moyen simple d'effectuer une tâche de manière asynchrone et simultanée dans votre application. Il existe deux types de files d'attente -

  • Serial Queues - Ils stockent les tâches de manière série et exécutent une tâche à la fois.

  • Concurrent Queues - Ils stockent les tâches de manière série et exécutent une tâche à la fois.

Certaines des fonctions utilisées pour créer ou obtenir des files d'attente sont -

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

Ajout de tâches aux files d'attente

Il existe deux types de fonctions qui aident à ajouter des tâches aux files d'attente. Ils sont -

Synchronous Functions -

  • dispatch_once - ne soumettra la tâche qu'une fois qu'elle aura dépassé la durée de vie de l'application.

  • dispatch_sync - soumettra une tâche à la file d'attente et ne reviendra que lorsque la tâche sera terminée.

Asynchronous Functions -

  • Dispatch_async - soumettra une tâche et reviendra.

  • Dispatch_after - retourne immédiatement mais retarde pour une heure précise.

  • Dispatch_async - retourne immédiatement mais la tâche est soumise plusieurs fois.

Exemple de code

Voici l'exemple de code pour ajouter des tâches à la file d'attente.

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

Exemple général d'utilisation d'une file d'attente

Le code suivant est un exemple d'utilisation d'une file d'attente.

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

C'est tout ce que nous ferons avec le contrôle de la concurrence, car il s'agit d'informations suffisantes jusqu'à ce que vous deveniez un développeur iOS intermédiaire.

Continuez à pratiquer les concepts que vous avez appris et essayez de les modifier et de les intégrer en fonction de vos besoins.