GCD为iOS提供的并发中枢调度器。他使用的是C语言,而非OC。不需要程序员去处理线程的生命周期。
理解GCD
GCD有2个主要组成:1队列,2任务
队列主要有串行队列和并发队列
串行队列----一个一个的去执行,必须等待上一个完成后,才能执行下一个。
并发队列----一个执行中,就开始执行另一个。
主队列----也就是main队列,主要是主线程在跑,不会在开启线程。
全局队列----作用相同于并发队列。(并发队列可以取名称,适用于企业开发,能够快速定位错误。)
任务主要分为同步任务,异步任务
同步任务----不会开启线程
异步任务----有任务就会开启线程(主队列不会)
理解上面这些,可以用一句话大致概括,特别注意里面的用词,慢慢体会:
开不开线程,取决于执行任务的函数,同步不会开,异步有任务才会开。
开几条现场,取决于队列,串行一条,并发可以开启多条。
GCD是如何工作的呢?根据上面的内容,可以分为4种情况:
1.串行队列-同步任务
在当前线程去处理事件,当一个事件完成以后,在去处理下一个事件。他不会去开启线程。
2.串行队列-异步任务
会开启一个线程,在完成一个事件后,在开启的线程中继续完成下一个事件。
3.并发队列-异步任务
会开启线程,在一个事件进行时,另外开启一个线程处理另一个事件。
4.并发队列-同步任务
不会开启线程,在同一个线程去处理事件。我们知道一个线程一次只能处理一个事件,那么这里也就成了处理完一个事件才会处理下一个事件。
无论是哪种队列,同异步处理事件,GCD都准从FIFO,根据添加事件的顺序,来执行。
但在开启线程处理的情况下,处理事件的用时是不确定的,特别是网络请求,上传下载,那么他们处理完成后的输出顺序就不确定了。
还有一点需要注意:当前是在主线程,并让主队列执行同步队列会造成锁死。
至于GCD的一些具体内容可以看看小例子,里面有详细的注释。