CGD全局并发队列和主队列的应用

*
1. 主队列特点 :主队列中的任务,只有主线程空闲的时候才会被调度
2. 主队列又叫全局串行队列,程序启动的时候就创建了主队列,在使用的时候不需要创建,直接GET.
2. 主队列中的任务一定是要在主线程执行的.
*/
pragma mark - 主队列+同步任务

// 不能向主队列中添加同步任务,会死锁

- (void)GCDDemo2

{

    // 获取主队列

    dispatch_queue_t queue =dispatch_get_main_queue();
    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        // 创建同步任务

        void (^task)() = ^
          NSLog(@"%@",[NSThreadcurrentThread]);

        };
        // 将同步任务添加到主队列
        dispatch_sync(queue, task);
        //    NSLog(@"hello");

    });

}

注意:因为主队列的任务是当主线程空闲的时候才会调用,所以将同步任务添加到主队列时,会造成造成死锁;

•死锁的原因
•主队列:如果主线程正在执行代码,就不调度任务
•同步执行:如果第一个任务没有执行,就继续等待第一个任务执行完成,再执行下一个任务此时互相等待,程序无法往下执行(死锁)

pragma mark - 主队列+异步任务

// 不开线程

- (void)GCDDemo1

{
    // 获取主队列

    dispatch_queue_t queue =dispatch_get_main_queue();

    // 创建异步任务
    void (^task)() = ^{

        NSLog(@"%@",[NSThreadcurrentThread]);

    };

    // 将异步任务添加到主队列
    // 异步任务不占用主线程
    dispatch_async(queue, task);
    NSLog(@"hello");

}

全局并发队列本质就是并发队列

dispatch_get_global_queue(0,0);
全局队列和并发队列的区别
并发队列有名称,可以跟踪错误,全局队列没有
在ARC中不需要考虑释放内存, dispatch_release(q);不允许调用。在MRC中需要手动释放内存,并发队列是create创建出来的 在MRC中见到create就要release,全局队列不需要release(只有一个)
一般我们使用全局队列,因为使用起来更加简单


/// 演示 全局并发队列
- (void)GCDDemo
{
    // 获取全局并发队列
    // 程序一启动就创建好的
    // 参数2 : 苹果不知道这个参数干什么的,预留着以后升级用的.
    // 参数1 : iOS7.0及以前,代表队列的优先级,iOS8.0及以后,代表服务质量
    // 开发中建议使用全局并发队列
    dispatch_queue_t global_queue = dispatch_get_global_queue(0, 0);

//    DISPATCH_QUEUE_PRIORITY_DEFAULT   
//    QOS_CLASS_UNSPECIFIED

    // 创建自定义的并发队列
    dispatch_queue_t con_queue = dispatch_queue_create("cz", DISPATCH_QUEUE_CONCURRENT);
//    dispatch_release(con_queue);
}

这里写图片描述
线程间通信

#pragma mark - 线程间的通信
- (void)GCDDemo4
{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        // 耗时操作
        NSLog(@"努力下载... %@",[NSThread currentThread]);

        // 回到主线程更新UI
        dispatch_async(dispatch_get_main_queue(), ^{

            // 回到其他线程
            NSLog(@"更新UI... %@",[NSThread currentThread]);
        });
    });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值