 <p>I would use GCD for this purpose, please refer to this tutorial or to apple documentation : <a href="https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1" rel="nofollow">https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1</a></p> <p>This would optimize the number of threads according to the device capabilibilities and eliminate unnecessary thread allocations. You would need Concurrent queue. The simplest(not the most optimized way) is: </p> <pre><code> dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // do your task here }); </code></pre> <p>For more information check the previously mentioned article.</p>