Контроль параллелизма

Параллелизм - это способ одновременного выполнения нескольких задач. В приложении параллелизм относится к нескольким задачам, выполняющимся одновременно / одновременно.

Параллелизм может сделать ваше приложение быстрее, чище и удобнее для пользователя. Многим разработчикам сложно использовать многопоточность, но APINSOperation и Dispatch Queues упрощает использование параллелизма и многопоточности в приложении.

Grand Central Dispatch

GCD - это наиболее часто используемый API для управления параллельным кодом и асинхронного выполнения операций на системном уровне. GCD предоставляет и использует очереди задач. Эти очереди представляют собой структуру данных, в которой используется терминология FIFO, т.е. задача, находящаяся на первом месте в очереди, будет выполнена первой, а задача в последней очереди будет выполнена в последнюю очередь.

Например - предположим, что очередь для бронирования билетов в кино, если вы последний человек, вы получите билет последним, а если кто-то придет за вами, он получит билет после вас.

Очередь отправки

Очередь отправки - это простой способ асинхронно и одновременно выполнять задачу в вашем приложении. Есть два типа очередей -

  • Serial Queues - Они хранят задачи последовательно и выполняют одну задачу за раз.

  • Concurrent Queues - Они хранят задачи последовательно и выполняют одну задачу за раз.

Некоторые из функций, которые используются для создания или получения очередей:

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

Добавление задач в очереди

Есть два типа функций, которые помогают добавлять задачи в очереди. Они -

Synchronous Functions -

  • dispatch_once - отправит задачу только по истечении срока службы приложения.

  • dispatch_sync - поставит задачу в очередь и вернется только тогда, когда задача будет выполнена.

Asynchronous Functions -

  • Dispatch_async - отправим задание и вернемся.

  • Dispatch_after - возвращается немедленно, но с задержкой на определенное время.

  • Dispatch_async - возвращается сразу, но задача отправляется несколько раз.

Пример кода

Ниже приведен пример кода для добавления задач в очередь.

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

Общий пример использования очереди

Следующий код - это пример использования очереди.

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

Это все, что мы будем делать с контролем параллелизма, поскольку этой информации достаточно, пока вы не станете промежуточным разработчиком iOS.

Продолжайте практиковать изученные концепции и пытайтесь изменить и интегрировать их в соответствии с вашими требованиями.