sync: 会阻塞当前线程,不具备开启新线程的能力
async:不会阻塞当前线程,具备开启新线程的能力(注: 具备开启线程的能力,不一定会开启新线程,如异步执行主队列的任务就不会开启新的线程)
串行队列和并行队列,都遵循fifo(先进先出)原则,两者区别:执行顺序不同,使用的线程个数不同
同步+串行:
所有的任务都是在当前线程中执行的,未开启新线程。(同步执行不具备开启新线程的能力)
任务完全按照自上至下按顺序执行(同步执行需等待当前任务执行完毕才能继续向下执行)
同步+并发:
所有任务都是在当前线程执行,未开启新线程(同步执行不具备开启新线程的能力)。
任务自上至下顺序执行。(同步执行需等待当前任务执行完毕才能继续向下执行)。
异步+串行:
开启了新线程(异步执行具有开启线程的能力)但是不管任务有多少个,只开启一条新线程(串行队列的任务都在同一条线程执行)。
所有的任务都是在begin和end之后执行的(异步执行不需等待任务完毕,就可继续向下执行)。
任务是按队列中的顺序执行的(串行队列每次只有一个任务被执行,任务一个接一个执行)。
异步+并发:
异步执行具备开启新线程的能力,并发队列可利用多个线程,同时执行多个任务
任务是在begin和end之后开始执行的(异步执行不需等待任务完毕,就可继续向下执行)。
同步+主队列:
在主线程,执行“同步+主队列”任务时,会导致死锁的发生
“同步+主队列”任务放到其他线程(非主线程),那么并不会发生死锁
所有的任务都将在主线程(而非当前线程)执行,且任务按序执行
异步+主队列:
所有的任务都是在主线程中执行的(虽然异步执行具备开启线程的能力,但因为是主队列,所以所有的任务都在主线程中)
任务均在begin和end之后执行(异步执行不需等待任务完毕,就可继续向下执行)
任务是按顺序执行(主队列是串行队列,每次只执行一个任务,任务一个接一个执行)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。