Control de concurrencia

La concurrencia es una forma de ejecutar más de una cosa al mismo tiempo. En una aplicación, la simultaneidad se refiere a varias tareas que se ejecutan al mismo tiempo o al mismo tiempo.

La simultaneidad puede hacer que su aplicación sea más rápida, limpia y brinde una mejor experiencia al usuario. El uso de subprocesos múltiples parece difícil para muchos desarrolladores, pero las API son comoNSOperation y Dispatch Queues facilita el uso de concurrencia y subprocesos múltiples en la aplicación.

Despacho de Grand Central

GCD es la API más utilizada para administrar código concurrente y ejecutar operaciones de forma asincrónica a nivel del sistema. GCD proporciona y utiliza colas de tareas. Estas colas son la estructura de datos que utiliza terminología FIFO, es decir, la tarea en el primer lugar en una cola se ejecutará primero y la tarea en la última cola se ejecutará al final.

Por ejemplo: supongamos que en una línea de reserva de entradas para el cine, si usted es la última persona, obtendrá la entrada en último lugar, y si alguien viene después de usted, recibirá una entrada después de usted.

Cola de despacho

La cola de despacho es una forma fácil de realizar una tarea de forma asincrónica y simultánea en su aplicación. Hay dos tipos de colas:

  • Serial Queues - Almacenan tareas en serie y ejecutan una tarea a la vez.

  • Concurrent Queues - Almacenan tareas en serie y ejecutan una tarea a la vez.

Algunas de las funciones que se utilizan para crear u obtener colas son:

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

Agregar tareas a las colas

Hay dos tipos de funciones que ayudan a agregar tareas a las colas. Ellos son -

Synchronous Functions -

  • dispatch_once - enviará la tarea solo una vez que finalice la vida útil de la aplicación.

  • dispatch_sync - enviará una tarea a la cola y regresará solo cuando se complete la tarea.

Asynchronous Functions -

  • Dispatch_async - enviará una tarea y volverá.

  • Dispatch_after - regresa inmediatamente pero se retrasa por un tiempo específico.

  • Dispatch_async - regresa inmediatamente pero la tarea se envía varias veces.

Código de ejemplo

A continuación se muestra el código de ejemplo para agregar tareas a la cola.

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

Ejemplo general de uso de una cola

El siguiente código es un ejemplo del uso de una cola.

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

Esto es todo lo que haremos con el control de concurrencia, ya que es información suficiente hasta que se convierta en un desarrollador intermedio de iOS.

Sigue practicando los conceptos que has aprendido e intenta modificarlos e integrarlos según tu requerimiento.