GCD任务队列机制解析

/**
GCD属于“并发”技术,程序员在开发的时候,不需要关心线程

GCD是C语言的

只需要将 “任务” 添加到 “队列” 就可以了。

*任务,是使用 block 来定义的
-同步任务 - 没有创建线程的能力,如果派发同步任务,无论在什么队列上,都不会创建线程
-异步任务 - 有创建线程的能力

使用GCD不面对线程,通常“异步”是多线程的代名词。

*队列
-串行队列 顺序执行-》队列中的所有任务依次执行,最多只能创建“一条线程”
dispatch_queue_create(“itcast”, DISPATCH_QUEUE_SERIAL);

-并发队列 同时执行 -> 队列中的任务不需要顺序执行,可以开启多条线程,具体开启线程数量由GCD底层决定的,具体数量程序员不能参与

-主队列 -》在”主线程”上调度任务,所有任务都不能开线程
使用主队列的目的,是为了实现线程间通讯!

-全局队列,苹果为了方便程序员使用,提供的全局队列
全局队列,本质上就是并发队列!

程序员自行创建的并发队列和全局队列的区别:能够指定队列的名称!
在商业级应用程序开发时,会有一个系统崩溃报告!可以记录住程序闪退时的信息,自动发送给开发商,便于及时修正错误!
开发商可以根据队列的名称,快速判断出哪里出的问题!

注意事项:如果开发MRC的程序,同时是自行创建的队列,需要记住:
使用:dispatch_release(q);释放相应创建的gcd对象

* 串行队列和并发队列的选择
串行队列:最多只能开启一条线程,所有任务顺序执行
- 如果对效率要求不高,对任务执行顺序要求比较高,可以使用串行队列
- 如果要省电,应该用串行队列

并发队列:可以开启多条线程(多个任务同时执行),所有任务随机执行
- 如果对效率要求高,对任务执行顺序要求不高,可以使用并发队列
- 对电量消耗不在乎,可以使用并发队列

* 开发中的多数选择
耗时的操作:全局队列+异步任务
线程间通讯:主队列+异步任务
*/

pragma mark - GCD演练

/**
串行队列,同步任务,开发中不用
*/

- (void)gcdDemo1
{
    // 1. 队列
    /**
     GCD的函数都是以dispatch开头的,在GCD语言的框架中,定义对象的时候 _t结尾
     dispatch   派发任务
     queue      队列
     serial     串行
     sync       同步任务
     */
    dispatch_queue_t  q  = dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);

    // 2. 在q队列上派发同步任务,任务内容就是block
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值