简析GCD

同步和异步针对线程,串行和并发是队列。

GCD常用 dispatch_once、dispatch_after、dispatch_group、dispatch_source、dispatch_semaphore

1.同步主队列 ❌

分析:begin在主线程中首先执行(没问题),下一个是end 但是主线程已经堵塞了,为什么? 是因为任务1 加入到主队列是在最后执行(主队列就是在主线程执行),但是主线程要等待任务1的回调才能执行下一步,但是任务1的回调是在主线程最后(主线程现在已经堵了)所以永远执行不了,

还有一种

2.异步主队列

分析: 主队列是在主线程执行的(是不会开启新线程,只是把这个任务加到队列最后去执行).如果把sleep(5)移到end上,其实执行也是一样的,但它会在整个主线程上堵塞 (asyncMain是主程序调用)

3.异步串行嵌套

分析:首先看b1加入到了一个串行队列里面,它是最后执行的,先begin end没问题(因为串行12345顺序执行)。它是没必要在开启线程的,消耗资源。任务1 和任务2同一线程

注意:队列是先进先出串行是顺序执行 也就是没必要开启新的线程来执行,看到有任务加入队列就是往后执行

4. 同步串行嵌套(异步)

分析:b1这是同步串行 不会开启新线程也就是加入队列后面执行 其实等于没有这个外层代码块,b2是异步加入队列 也就是加到最后执行 要开启新线程

5.异步并发嵌套

分析:在异步队列中加入同步,也就是同于加入到队列后执行,等于没有外层嵌套,不会开始新线程

6.Group

发表回复

电子邮件地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud