GCD任务和队列不同组合方式:
GCD虽然有两种任务执行方式(同步执行/异步执行),两种队列(串行队列/并发队列),但是却有四种不同的组合方式:
1、异步执行+并发队列
可以开启多个线程,任务交替(同时)执行。
2、同步执行+并发队列
在当前线程中执行任务,不会开启新线程,执行完一个任务,再执行下一个任务。
3、异步执行+串行队列
会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务。
4、同步执行+串行队列
不会开启新线程,在当前线程执行任务。任务是串行的,执行完一个任务,再执行下一个任务。
实际上还有两种默认的队列:全局并发队列、主队列;所以又多了两种组合方式:
5、异步执行+主队列
只在主线程中执行任务,执行完一个任务,再执行下一个任务。任务都是在当前线程(主线程)中执行的,并没有开启新的线程(虽然 异步执行 具备开启线程的能力,但因为是主队列,所以所有任务都在主线程中);任务是按顺序执行的(因为主队列是 串行队列,每次只有一个任务被执行,任务一个接一个按顺序执行);异步执行不会做任何等待。
6、同步执行+主队列
在不同线程中调用结果也是不一样,在主线程中调用会发生死锁问题,互相等待卡住不可行;而在其他线程中调用则不会,其它线程中不会开启新线程,执行完一个任务,再执行下一个任务。
GCD任务和队列不同组合方式的区别:如图
GCD任务和队列不同组合方式的区别
GCD不同队列+不同任务组合,以及队列中嵌套队列使用区别:如图
GCD不同队列+不同任务组合,以及队列中嵌套队列使用区别