GCD的理解

GCD为iOS提供的并发中枢调度器。他使用的是C语言,而非OC。不需要程序员去处理线程的生命周期。

理解GCD

GCD有2个主要组成:1队列,2任务

队列主要有串行队列和并发队列

串行队列----一个一个的去执行,必须等待上一个完成后,才能执行下一个。

并发队列----一个执行中,就开始执行另一个。

主队列----也就是main队列,主要是主线程在跑,不会在开启线程。

全局队列----作用相同于并发队列。(并发队列可以取名称,适用于企业开发,能够快速定位错误。)

任务主要分为同步任务,异步任务

同步任务----不会开启线程

扫描二维码关注公众号,回复: 2277477 查看本文章

异步任务----有任务就会开启线程(主队列不会)

理解上面这些,可以用一句话大致概括,特别注意里面的用词,慢慢体会:

开不开线程,取决于执行任务的函数,同步不会开,异步有任务才会开。

开几条现场,取决于队列,串行一条,并发可以开启多条。

GCD是如何工作的呢?根据上面的内容,可以分为4种情况:

1.串行队列-同步任务

在当前线程去处理事件,当一个事件完成以后,在去处理下一个事件。他不会去开启线程。

2.串行队列-异步任务

会开启一个线程,在完成一个事件后,在开启的线程中继续完成下一个事件。

3.并发队列-异步任务

会开启线程,在一个事件进行时,另外开启一个线程处理另一个事件。

4.并发队列-同步任务

不会开启线程,在同一个线程去处理事件。我们知道一个线程一次只能处理一个事件,那么这里也就成了处理完一个事件才会处理下一个事件。

无论是哪种队列,同异步处理事件,GCD都准从FIFO,根据添加事件的顺序,来执行。

但在开启线程处理的情况下,处理事件的用时是不确定的,特别是网络请求,上传下载,那么他们处理完成后的输出顺序就不确定了。

还有一点需要注意:当前是在主线程,并让主队列执行同步队列会造成锁死。

至于GCD的一些具体内容可以看看小例子,里面有详细的注释。

猜你喜欢

转载自blog.csdn.net/u011279386/article/details/81097146
gcd