美文网首页
GCD的基本使用

GCD的基本使用

作者: zhouios | 来源:发表于2016-12-08 18:16 被阅读0次

1,简单的写法

//dispatch_get_global_queue(0, 0)是全局并发队列,后面括号内是要执行的任务
dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"task %@",[NSThread currentThread]);
    });
//输出后可以看见,线程的复用,能够避免线程重复的创建和销毁,节省时间和空间;不用我们管理线程的生命周期
for (int i = 0; i < 20; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
             NSLog(@"task %@ %d",[NSThread currentThread],i);
        });
    }

2,知识点
并发队列:(1)可以让多个任务同时执行,自动开启多个线程;(2)只有在异步函数下才有效;
串行队列:让任务一个接着一个执行
主队列:特殊的串行队列,代表主线程

同步操作:在当前线程中执行任务,不具备开启新线程的能力;
异步操作:在新的线程中执行任务,具备开启新线程的能力;

3,串行队列的操作
(1)串行队列的同步操作

//不开线程,在当前线程下执行
//任务是有序执行的
-(void)demo{
//创建串行队列
    //参数1:队列的名字
    //参数2:队列的属性
    dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
    
    for (int i =0; i<20; i++) {
        dispatch_sync(serialQueue, ^{
            NSLog(@"serialQueue %@ %d",[NSThread currentThread],i);
        });
    }
}

(2)串行队列的异步操作

//开一个线程
//任务是有序执行的
-(void)demo{
    //创建串行队列
    //参数1:队列的名字
    //参数2:队列的属性
    dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
    
    for (int i =0; i<20; i++) {
        dispatch_async(serialQueue, ^{
            NSLog(@"serialQueue %@ %d",[NSThread currentThread],i);
        });
    }
}

4,并行队列的操作
(1)并行队列,异步执行

//开多个线程
//任务无序执行
//效率最大
-(void)demo1{
    //生成并行队列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    
    for (int i = 0; i < 20; i++) {
        dispatch_async(concurrentQueue, ^{
            NSLog(@"con %@ %d",[NSThread currentThread],i);
        });
    }
}

(2)并行队列同步操作

//不开线程,在当前线程下执行
//任务顺序执行
//等于串行队列,同步执行
-(void)demo{
    //生成并行队列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    
    for (int i = 0; i < 20; i++) {
        dispatch_sync(concurrentQueue, ^{
            NSLog(@"con %@ %d",[NSThread currentThread],i);
        });
    }
}

总结:开不开线程是由:同步操作(不开启线程)和异步操作(开启线程)
4,主队列的操作
主队列之能够在异步执行,任务顺序执行;
不能够在同步执行,会造成死锁;

相关文章

  • iOS-多线程:GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(6种不同组合区别) GCD 线程间的通信...

  • 浅析多线程GCD

    GCD的基本使用代码

  • 多线程和AFN网络框架配合使用

    ios的多线程一般有NSOperation和GCD.NSOperation基本使用: GCD基本使用: 简单的多线...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

  • 多线程之GCD

    GCD介绍 1、GCD简介 2、GCD任务和队列 3、GCD 的基本使用 4、GCD 线程间的通信 5、GCD 的...

  • iOS GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(六种组合不同区别,队列嵌套情况区别,相互...

  • iOS多线程--GCD篇

    GCD 文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步...

  • GCD多线程详解

    1. GCD 简介 2. GCD 任务和队列 3. GCD 的使用步骤 4. GCD 的基本使用(6种不同组合区别...

  • 多线程网络

    第一节 1.基本概念 2.线程安全 3.线程间通信 4.GCD GCD基本使用【重点】 GCD的栅栏函数 在使用栅...

  • # GCD基本使用

    GCD基本使用 GCD是iOS开发中常用的一种线程使用方法,相比NSThread来说,代码更加的底层一点,用了Bl...

网友评论

      本文标题:GCD的基本使用

      本文链接:https://www.haomeiwen.com/subject/emusmttx.html