Параллелизм — это способ выполнения более чем одной вещи одновременно. В приложении параллелизм относится к нескольким задачам, выполняемым одновременно / одновременно.
Параллелизм может сделать ваше приложение более быстрым, чистым и улучшить работу пользователей. Многопоточность кажется многим разработчикам трудной, но такие API, как NSOperation и Dispatch Queues, упрощают использование параллелизма и многопоточности в приложении.
Grand Central Dispatch
GCD — это наиболее часто используемый API для управления параллельным кодом и асинхронного выполнения операций на системном уровне. GCD предоставляет и использует очереди задач. Эти очереди представляют собой структуру данных, использующую терминологию FIFO, то есть задача, находящаяся на первом месте в очереди, будет выполнена первой, а задача в последней очереди будет выполнена, наконец.
Например: предположим, что линия бронирования билетов в кино, если вы последний человек, вы получите билет последним, а если кто-то придет за вами, он получит билет после вас.
Очередь отправки
Очередь отправки — это простой способ асинхронного и одновременного выполнения задачи в вашем приложении. Есть два типа очередей —
-
Последовательные очереди — они хранят задачи последовательно и выполняют одну задачу за раз.
-
Параллельные очереди — они хранят задачи последовательно и выполняют одну задачу за раз.
Последовательные очереди — они хранят задачи последовательно и выполняют одну задачу за раз.
Параллельные очереди — они хранят задачи последовательно и выполняют одну задачу за раз.
Некоторые из функций, которые используются для создания или получения очередей:
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
Добавление задач в очереди
Существует два типа функций, которые помогают добавлять задачи в очереди. Они —
Синхронные функции —
-
dispatch_once — отправит задание только после того, как оно закончится.
-
dispatch_sync — отправит задачу в очередь и вернется только после ее завершения.
dispatch_once — отправит задание только после того, как оно закончится.
dispatch_sync — отправит задачу в очередь и вернется только после ее завершения.
Асинхронные функции —
-
Dispatch_async — отправит задачу и вернется.
-
Dispatch_after — возвращается немедленно, но задерживается на определенное время.
-
Dispatch_async — немедленно возвращается, но задание отправляется несколько раз.
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-разработчиком.
Продолжайте практиковать концепции, которые вы изучили, и пытайтесь модифицировать и интегрировать их в соответствии с вашими требованиями.