In what cases would you prefer to use NSOperationQueue
over GCD?
From my limited experience of these two, I take it that with NSOperationQueue
you basically have control over how many concurrent operations there are.
With GCD you can't do this, since you are using a queue. Except you can somehow simulate this with a multi core processor, although still I think there's no way to control it.
NSOperationQueue works best when tasks are discrete, synchronous and live in the same thread (eg they are more or less atomic), the queue can be used as basic thread pool though in almost any situation.
NSOperationQueue can be more suitable for long-running operations that may need to be cancelled or have complex dependencies. GCD dispatch queues are better for short tasks that should have minimum performance and memory overhead.
A queue that regulates the execution of operations.
GCD maintains tasks queues to operate them. Once a task is inserted in the queue it starts its execution. It's up to us whether we want to start this task synchronously or asynchronously. Following is the line to create a Dispatch Queue: let dispatchQueue = DispatchQueue(label: "mydispatchqueue")
NSOperationQueue
is built on GCD
as of iOS 4. Use the simplest API for the task at hand.Measure if it's a performance problem and then reevaluate if needed.dispatch_async
is lower level, usually C-type stuff (but not limited to), and is good for one-shot and sequential type deals. NSOperationQueues are higher level, Objective-C stuff, and are good if you are adding a lot of operations at various points in your code, and/or need to manage concurrency, priorities and dependencies.
I assume by NSPriorityQueue you mean NSOperationQueue? The main reasons to use NSOperationQueue over GCD are if you need its additional features:
Otherwise, unless you're working with an API that takes an NSOperationQueue, GCD is probably a better bet
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With