Concurrency in iOS Development

Techno Kryon
Concurrency means the collection of techniques and mechanisms that enable a system to perform several different tasks simultaneously. Concurrency is considered hard to understand. It helps to write powerful, fast execution, and reactive apps. In iOS we have NSOperation and Dispatch Queues to perform concurrency.

·         Utilize device hardware: Now all devices have a multi-core processor that allows developers to execute multiple processes in parallel. We should utilize this feature and get benefits out of the hardware.
·         Better user experience: While performing heavy tasks UI will freeze till the task execution. When the user faces this situation, the first step that user will take to uninstall/close your app without a second thought. With concurrency, all these tasks can be done in the background without changing the main thread or disturbing your users. They can still tap on buttons, scroll and navigate through your app, while it handles the heavy loading task in the background.
·         The APIs like NSOperation and dispatch queues make it easy to use concurrency: Creating and managing threads are not easy tasks. Another important advantage about these APIs is that it helps you achieve synchronization easily to avoid a race condition. Race condition happens when multiple threads try to access the shared resource and that leads to unexpected results. By usage of synchronization, resources are protected from being shared between multiple threads.

GCD (Grand Central Dispatch)
GCD is the most frequently used API to manage concurrency and execute operations asynchronously at the kernel unix level of the system. GCD provides and manages queues of processes.

 Dispatch Queues:
It is an easy way to perform tasks asynchronously and parallelly in your application. Tasks are submitted in form of blocks. There are two types of dispatch queues: (1) serial queues (2) concurrent queues. All process will run in separate threads instead of the main thread.

Serial Queues:
This queue can only execute one task at a time. All processes in the same queue will execute linearly. Tasks can be executed concurrently by using multiple serial queues.
The advantages of using serial queues:
·         Guaranteed serialized access to a shared resource that avoids deadlock.
·         Tasks are executed in a linear predicted order. When you submit tasks in a serial dispatch queue, they will be executed in FIFO (First In First Out) order.
·         You can create several numbers of serial queues.

Concurrent Queues:
It allows you to execute multiple processes in parallel. Their execution all occur concurrently and don’t have to wait for other processes to start. Concurrent queues begin in the same order but the order of execution cannot be determined, throughput time or the number of the process being executed at a given point.
·         DISPATCH_QUEUE_PRIORITY_HIGH
·         DISPATCH_QUEUE_PRIORITY_DEFAULT
·         DISPATCH_QUEUE_PRIORITY_LOW
·         DISPATCH_QUEUE_PRIORITY_BACKGROUND
These queue types represent the priority of execution.

 NSOperation
In iOS SDK, there are two subclasses of NSOperation. The two classes are:

1.    NSBlockOperation: This class is used to initiate the operation with one or more blocks. It can contain more than a block and will be considered as finished when all blocks are executed.
2.    NSInvocationOperation: Use this class to start a process that consists of invoking a selector on a specified object.

Advantages of NSOperation:
1.    It supports dependencies through the method addDependency in the NSOperation class. When needed to start a process that depends on the execution of the other NSOperation is used.
2.    Secondly, you can change the execution priority by setting the property queue priority.
3.    Tasks with higher priority will be executed first.
4.    You can cancel a particular block or all blocks for any given queue. The task can be cancelled after added to the queue.
5.    It has three helpful boolean properties which are finished, cancelled, and ready. Finished will be set to true once process execution is done. Cancelled is set to true once the process has been cancelled. Ready is set to true once the process is about to be executed now.
6.    It has an option to set completion block to be called once the task is finished. The completion block will be called once the boolean property (finished) is set to true in NSOperation.




Comments

Popular posts from this blog

Here are top dos and don’ts of SEO to build you a SEO friendly website

SAP Business Intergration

WooCommerce vs Magento