队列:
存放任务的地方,可以理解为存放一段一段要执行的代码。
线程:
执行任务的流程。执行完A,接着执行B,然后再执行C。
任务的执行过程:
=====================================
同步派发必然会导致当前线程被阻塞住,和队列无关。派发函数必须等待任务完成才能返回。
用同步函数往并发队列派发任务时:
任务会当前线程执行。用同步函数往串行队列派发任务时:
只要调用派发函数时不是在同一串行队列中,就不会阻塞,任务会在当前线程一个一个串行执行,然后派发函数返回。
而异步派发函数比较神奇,不用等待任务完成就可直接返回,因此即使在串行队列中向同一队列异步派发任务,也不会造成死锁,因为派发函数直接就返回了,串行队列中靠后的任务就可以得以执行。至于并发队列,各个任务直接本来就是并发执行的,不存在谁等待谁完成的问题。
http://www.saitjr.com/ios/ios-gcd-deadlock.html