首页 > 代码库 > 关于GCD中的队列

关于GCD中的队列

队列分为串行队列,并发队列,全局队列和主队列;

串行队列:一次只能安排一个任务。

dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA); 

DISPATCH_QUEUE_SERIAL==NULL;

并发队列:一次可安排多个任务。

dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);

全局队列:系统为了方便程序员开发使用,提供的一个队列,本质上就是并发队列;

dispatch_queue_t q = dispatch_get_global_queue(0, 0);

使用以下代码创建全局队列,就可以实现 iOS 7 & iOS 8的适配!

     dispatch_get_global_queue(0, 0);

主队列:专门用在主线程上调度任务的队列。

主线程上调度的任务,都必须在主线程上执行。

dispatch_queue_t q = dispatch_get_main_queue();

 

在GCD中是将”任务“添加到“队列”中,并指定任务的“执行方法”。

任务:用block封装的一个代码块。

任务:

同步任务: 这句代码没有执行完毕,就不能执行下一段代码。不需要开启线程

异步任务: 这句代码没有执行完毕,可以执行下一局代码,异步往往是开线程的代名词

小结:

1、开不开线程取决于执行任务的函数---同步任务不开线程,异步任务开启线程。

2、开多少个线程取决于队列(并发队列可已开启多条线程,串行队列只开启一条线程)前提是异步任务。

同步任务:不能开线程,一不小心还会死锁!有什么用处?

 作用:可以在并发队列中,挡住后续的任务,必须等待某一个任务完成,这种任务之间的关系-"依赖"

 

如果在 MRC 开发,针对自行创建的队列,需要release

 

 dispatch_release(q);

 

关于GCD中的队列