here you can find detail explanation about GCD.
Notes: Asyn and sync is related between multiple queues and concurrent and is related to work items inside particular queue.
if compiler see there is asyc queue it will start executing that on background thread according to QoS. but if there is sync queue before async then only after executing the sync queue async queue will execute.
If queue is not concurrent the work items in same queue will execute one after another. but if queue is concurrent all work items will work parallely