先来说一个队列和任务:
队列分为串行和并行
任务的执行分为同步和异步
这两两组合就成为了串行队列同步执行,串行队列异步执行,并行队列同步执行,并行队列异步执行
而异步是多线程的代名词,异步在实际引用中会开启新的线程,执行耗时操作。
那我们先来知道一个非常重要的事情:
------- 队列只是负责任务的调度,而不负责任务的执行 ---------
------- 任务是在线程中执行的 ---------
队列和任务的特点:
队列的特点:先进先出,排在前面的任务最先执行,
串行队列:任务按照顺序被调度,前一个任务不执行完毕,队列不会调度
并行队列:只要有空闲的线程,队列就会调度当前任务,交给线程去执行,不需要考虑前面是都有任务在执行,只要有线程可以利用,队列就会调度任务。
主队列:专门用来在主线程调度任务的队列,所以主队列的任务都要在主线程来执行,主队列会随着程序的启动一起创建,我们只需get即可
全局队列:是系统为了方便程序员开发提供的,其工作表现与并发队列一致,那么全局队列跟并发队列的区别是什么呢?
1.全局队列:无论ARC还是MRC都不需要考录释放,因为系统提供的我们只需要get就可以了
2.并发队列:再MRC下,并发队列创建出来后,需要手动释放dispatch_release()
同步执行:不会开启新的线程,任务按顺序执行
异步执行:会开启新的线程,任务可以并发的执行
那么有这么几种组合
GCD实现原理:
GCD有一个底层线程池,这个池中存放的是一个个的线程。之所以称为“池”,很容易理解出这个“池”中的线程是可以重用的,当一段时间后这个线程没有被调用胡话,这个线程就会被销毁。注意:开多少条线程是由底层线程池决、、、、、定的(线程建议控制再3~5条),池是系统自动来维护,不需要我们程序员来维护(看到这句话是不是很开心?)
而我们程序员需要关心的是什么呢?我们只关心的是向队列中添加任务,队列调度即可。
~~~未完待续~~~
原文:http://www.cnblogs.com/KongPro/p/5193175.html