美文网首页
OC笔记——GCD队列的简单使用

OC笔记——GCD队列的简单使用

作者: Hehe_99e3 | 来源:发表于2018-06-28 10:48 被阅读10次
图4 图3 图2 图1

// 1. 队列的基本类型及创建

    //串行队列的创建

    dispatch_queue_t my_serial_queue;

    my_serial_queue = dispatch_queue_create("com.serial.queue", NULL);

   //并发队列,采用默认优先级

    dispatch_queue_t myQueue;

    myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //#define DISPATCH_QUEUE_PRIORITY_HIGH 2

    //#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0

  //#define DISPATCH_QUEUE_PRIORITY_LOW (-2)

  //#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN

    //主线程队列

    dispatch_queue_t main_queue = dispatch_get_main_queue();

   //获取当前队列..  已经弃用

    dispatch_queue_t current_queue = dispatch_get_current_queue();

    //生成串行队列

    dispatch_queue_t serial_queue =  dispatch_queue_create("com.serial.queue", DISPATCH_QUEUE_SERIAL);

   dispatch_queue_t queue1 = dispatch_queue_create("com.serial.queue", NULL);

   //生成并发队列 2种方式

   dispatch_queue_t concurrent_queue2 = dispatch_queue_create("com.concurretnt_queue", DISPATCH_QUEUE_CONCURRENT);

    //只能生成并发队列

    dispatch_queue_t queue4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

   /*下面是一些队列类型的创建 ,我们打印出来1。2。3。4。的顺序,看队列的具体执行结果

      同步 异步 强调的是线程,同步为当前线程中,异步为在多个新开辟的子线程中执行,

    串行队列 并行队列 强调的是执行顺序,串行为一个接一个的顺序执行,(按程序的正常顺序走。。。)当前运行的任务只有一个; 而并行则为同时并发,没有确定的执行顺序,当前运行的任务可能有多个 */

    /*我们可以把同步异步想象为交通的几个车道,同步为左转车道。。异步为左转车道+直行车道+右转车道

      串行。并行我们想象为 车道上的车辆,这样就容易理解些了,先考虑同步异步问题(看自己在哪条路上),再考虑串行并行(自身的道路上的排列顺序),就知道任务的执行顺序了

    */

    // 2. 创建串行同步队列

    dispatch_queue_t queue = dispatch_queue_create("com.serial.queue", NULL);

    dispatch_sync(queue, ^{

        //设置同步队列,参数为执行队列的名称,执行语句

        [self printThread:1];

    });

    dispatch_sync(queue, ^{

        [self printThread:2];

    });

    dispatch_sync(queue, ^{

        [self printThread:3];

    });

    dispatch_sync(queue, ^{

        [self printThread:4];

    });

  结果如图1

    //串行同步队列中,任务都在当前线程执行(同步),并且顺序执行(串行)

    //  2. 串行异步执行

    dispatch_async(queue, ^{

        [self printThread:1];

    });

    dispatch_async(queue, ^{

        [self printThread:2];

    });

    dispatch_async(queue, ^{

        [self printThread:3];

    });

    dispatch_async(queue, ^{

        [self printThread: 4];

    });

结果为图2

    //在串行异步队列中,任务都在新开辟的子线程中执行(异步),并不是主线程了,并且顺序执行(串行)

   // 3. 并发同步队列

    dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_sync(queue2, ^{

        [self printThread:1];

    });

    dispatch_sync(queue2, ^{

        [self printThread:2];

    });

    dispatch_sync(queue2, ^{

        [self printThread:3];

    });

    dispatch_async(queue2, ^{

        [self printThread:4];

    });

   结果为图3

    //在并发同步队列中,线程为当前线程中(同步),只有一条线程,会顺序执行,并发的特别并没有体现出来,同步会阻塞当前线程

    // 4. 并发异步队列

    dispatch_async(queue2, ^{

        [self printThread:1];

    });

    dispatch_async(queue2, ^{

        [self printThread:2];

    });

    dispatch_async(queue2, ^{

        [self printThread:3];

    });

    dispatch_async(queue2, ^{

        [self printThread:4];

    });

    结果为图4

    //再并发异步中,先考虑异步,再新开辟的子线程中,并且并发执行,任务同时进行,没有顺序可言

   //平时我们使用使用最多的是并发异步队列,比如开辟多个子线程下载图片/文件等

相关文章

  • OC笔记——GCD队列的简单使用

    // 1. 队列的基本类型及创建 //串行队列的创建 dispatch_queue_t my_seria...

  • GCD基础学习

    一、队列的创建和获取方式 GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。创建一个队列(串行队列或并发...

  • iOS - GCD总结

    GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。 创建一个队列(串行队列或并发队列)将任务追加到任务的...

  • iOS GCD的详细使用

    GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。 创建一个队列(串行队列或并发队列)将任务追加到任务的...

  • Swift 5.1 - GCD使用总结

    在swift中GCD采用链式调用,较OC而言使用方式更为简单,可读性更高。全文代码均默认在主线程中执行。 队列的获...

  • swift 中GCD书写

    除了使用GCD创建单例和oc不同,其他几乎一致 1)队列创建 获取系统存在的全局队列 Global Di...

  • iOS多线程--GCD篇

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

  • GCD介绍

    一、GCD简单介绍 什么是GCD GCD优势 任务和队列 GCD有2个核心概念 GCD的使用就2个步骤 将任务添加...

  • GCD的简单使用

    GCD简单使用 GC使用就2个步骤 定制任务 将任务添加到队列中,gcd会自动将队列中的任务取出,放到对应的线程中...

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

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

网友评论

      本文标题:OC笔记——GCD队列的简单使用

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