GCD 小结

作者: jianshu_wl | 来源:发表于2016-07-08 17:30 被阅读449次

一、 同步/异步、串行/并行的区别

1.同步/异步

同步/异步是指线程与线程之间的关系.

2.串行/并行

串行/并行是指队列内部任务与任务之间的关系.
如果是串行队列,那么队列内部的任务是按顺序执行的.
如果是并行队列, 那么队列内部的任务执行是无序的, 没有先后顺序.

二、 线程与队列

1. 线程
//同步线程
dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
//异步线程
dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
2. 队列
//创建一个串行队列
dispatch_queue_t queue = dispatch_queue_create("label", DISPATCH_QUEUE_SERIAL);
//创建一个并行队列
dispatch_queue_t queue = dispatch_queue_create("label", DISPATCH_QUEUE_CONCURRENT);
//获取全局队列, 全局队列是并行的
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//获取主线程的队列, 主线程队列是串行的
dispatch_queue_t queue = dispatch_get_main_queue();

三、几种常见的任务处理方式

1. 异步串行队列
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);
    for (int i = 0; i < 10; i++) {
        dispatch_async(queue, ^{
            NSLog(@"------- %d", i);
        });
    }

队列中所有任务在异步线程中按顺序执行, 结果如下:

异步串行队列
2. 异步并行队列
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
    for (int i = 0; i < 10; i++) {
        dispatch_async(queue, ^{
            NSLog(@"------- %d", i);
        });
    }

队列中所有任务在异步线程并行执行, 无先后顺序, 结果如下:

异步并行队列
3. 异步串行队列, 并在任务完成后进行通知
dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);
    for (int i = 0; i < 10; i++) {
        dispatch_group_async(group, queue, ^{
            NSLog(@"------- %d", i);
        });
    }
    dispatch_group_notify(group, queue, ^{
        NSLog(@"任务执行完毕!");
    });

运行结果如下:

异步串行队列, 并在任务完成后进行通知
4. 异步并行队列, 并在任务完成后进行通知
dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
    for (int i = 0; i < 10; i++) {
        dispatch_group_async(group, queue, ^{
            NSLog(@"------- %d", i);
        });
    }
    dispatch_group_notify(group, queue, ^{
        NSLog(@"任务执行完毕!");
    });

结果如下:

异步并行队列, 并在任务完成后进行通知

相关文章

  • iOS实录16:GCD使用小结(二)

    iOS实录16:GCD使用小结(二) iOS实录16:GCD使用小结(二)

  • gcd小结

    DCD 其他用法

  • GCD小结

    GCD 全称: Grand Central Dispatch本质: 一套低层级的 C 语言 API,GCD 管理着...

  • GCD 小结

    一、 同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系. 2.串行/并行 串行/并...

  • GCD小结

    本文总结于 一些 iOS / Web 开发相关的翻译或原创博客文章 GCD (grand_central_disp...

  • iOS中GCD的使用小结

    iOS中GCD的使用小结 作者dullgrass 2015.11.20 09:41*字数 4996阅读 20199...

  • 2020-06-18

    GCD 源码 Git - rebase 用法小结 ReactNative源码解析——通信机制详解(1/2) Rea...

  • iOS-多线程

    iOS开发中常用的几种多线程方案,简单做个小结,方便日后查阅。 NSThead GCD NSOperation &...

  • 【iOS小结】GCD

    一. GCD和多线程的介绍 GCD GCD是异步执行任务的技术之一。开发者只需要定义想执行的任务并追加到适当的Di...

  • GCD使用小结

    GCD是iOS开发过程当中使用的比较频繁也比较重要的一块,往往项目里涉及到这方面的代码基本都是核心功能,维护的时候...

网友评论

    本文标题:GCD 小结

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