Controle de simultaneidade

A simultaneidade é uma forma de executar mais de uma coisa ao mesmo tempo. Em um aplicativo, a simultaneidade se refere a várias tarefas em execução ao mesmo tempo / simultaneamente.

A simultaneidade pode tornar seu aplicativo mais rápido, mais limpo e dar uma melhor experiência ao usuário. O uso de multithreading parece difícil para muitos desenvolvedores, mas APIs comoNSOperation e Dispatch Queues facilita o uso de simultaneidade e multithreading no aplicativo.

Grand Central Dispatch

GCD é a API mais comumente usada para gerenciar código simultâneo e executar operações de forma assíncrona no nível do sistema. O GCD fornece e usa filas de tarefas. Essas Filas são a estrutura de dados que usa a terminologia FIFO, ou seja, a tarefa em primeiro lugar em uma fila será executada primeiro e a tarefa em último lugar de uma fila será executada por último.

Por exemplo - suponha que uma fila de reserva de ingressos de cinema, se você for a última pessoa, receberá o ingresso por último, e se alguém vier atrás de você, receberá um ingresso atrás de você.

Fila de despacho

A fila de despacho é uma maneira fácil de executar uma tarefa de maneira assíncrona e simultânea em seu aplicativo. Existem dois tipos de filas -

  • Serial Queues - Eles armazenam tarefas em série e executam uma tarefa por vez.

  • Concurrent Queues - Eles armazenam tarefas em série e executam uma tarefa por vez.

Algumas das funções usadas para criar ou obter filas são -

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

Adicionando Tarefas às Filas

Existem dois tipos de funções, que ajudam a adicionar tarefas às filas. Eles são -

Synchronous Functions -

  • dispatch_once - enviará a tarefa apenas quando ela terminar o tempo de vida do aplicativo.

  • dispatch_sync - enviará uma tarefa para a fila e retornará somente quando a tarefa for concluída.

Asynchronous Functions -

  • Dispatch_async - apresentará uma tarefa e retornará.

  • Dispatch_after - retorna imediatamente, mas atrasa por um tempo específico.

  • Dispatch_async - retorna imediatamente, mas a tarefa é enviada várias vezes.

Código Exemplo

A seguir está o código de exemplo para adicionar tarefas à fila.

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

Exemplo geral de uso de uma fila

O código a seguir é um exemplo de como usar uma fila.

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

Isso é tudo que faremos com o controle de simultaneidade, pois são informações suficientes até você se tornar um desenvolvedor iOS intermediário.

Continue praticando os conceitos que aprendeu e tente modificá-los e integrá-los de acordo com suas necessidades.