As opposed to what?
Obviously this can still be useful in read-heavy systems where the lock has to be held for long spans, but for our synchronized collections, we switched to std::mutex, which was massively faster.
Its also very flexible, as you can do `dispatch_sync` if you need a synchronous fetch of the resource or use callback blocks to go as async as possible.
Then again, if you can do things like background non-essential operations, then the higher-level benefits can probably outweigh that.
dispatch_async will necessarily be slower, but don't overestimate how much work is really going to happen in the cases where it matters.