GCD随笔

作者: 面朝对象_春暖花开 | 来源:发表于2016-11-02 21:44 被阅读25次

GCD:grand center dispatch(伟大的中枢调度器),打开GCD的包文件 <dispatch/dispatch.h>可以看到它的组成如图:

屏幕快照 2016-11-02 下午9.08.27.png

下面介绍这几个东西的用法.

一:<dispatch/once.h>

这个东西我们常常用在单例的位置上,常见用法如下


屏幕快照 2016-11-02 下午9.16.53.png

主要用于确保block的回调只执行一次,用于限制任务的执行,提高负载速度

二:<dispatch/block.h>

用于写任务的详细代码,GCD中所有任务都是通过dispatch_block_t来写的,我们的重点不是在这里,就不做详细介绍了...

三:<dispatch/queue.h>

这是创建CGD的两个必要条件之一:队列!GCD的有两个核心:一:任务 二:队列.只有将任务放在队列中,任务才会被CPU创建并执行.

1,创建

dispatch_queue_create(const char *_Nullable label,
    dispatch_queue_attr_t _Nullable attire);

这里需要两个参数:第一个参数是这个队列标示可以为空的,第二个是标注该队列是穿行或是并发,取值有两个DISPATCH_QUEUE_SERIAL和DISPATCH_QUEUE_CONCURRENT依次表示串行和并发队列.我们常用的并发队列在苹果的API中给出了一个全局的队列供我们使用:


屏幕快照 2016-11-02 下午9.37.53.png

这里同样有两个参数:第一个参数,从苹果文档可以看到该参数用于提高任务的执行质量,设置任务的优先级,它有四个可选参数:从上到下优先级依次降低,主要用于标注该队列的优先级,苹果官方建议我们填0,也就是default模式,因为通过dispatch_queue_creat创建的队列就是取default来创建的.


屏幕快照 2016-11-02 下午9.40.30.png
第二个参数是苹果留给未来的,我们一直填0,就可以了.

三:同步或者异步任务

dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
dispatch_sync(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
在这里我们需要区分一下四个名次的概念,以免混淆:同步,异步,并发,串行.
<同步和异步>表示的是有没有开启多线程的能力,即是否允许开启多线程.
<并发和串行>指的是队列中任务的执行方式.
<需要强调的是>并不是并发队列一定会开启多线程,只有当并发队列中加入了具有开启多线程能力的异步任务之后才会开启分线程.
而异步任务也不一定是在多线程处理,只有将他放在允许他使用并发方式执行的队列中,他才能多线程执行.否则只能是分线程顺序处理
<也就是说> 同步和异步,允不允许开多线程..并发和串行,要不要开多线程..

以上介绍不懂的请我吃饭,咱们好好唠唠.接下来我们看一下这两个东西,发现真的没啥好说的,参数一:放入的队列..参数二:任务的代码..

相关文章

  • GCD随笔

    GCD:grand center dispatch(伟大的中枢调度器),打开GCD的包文件

  • 关于GCD随笔

    对于GCD来说,所有的执行都放到队列中(queue),队列的特点是FIFO(先提交的先执行)。从“数据结构”的角度...

  • 多线程之GCD

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

  • 扩展GCD(求逆元,解同余方程等等)

    首先要知道gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(|a|,|b|)=gcd(b,a%b)...

  • iOS - GCD

    目录 GCD简介 GCD核心概念 GCD队列的使用 GCD的常见面试题 GCD简介 Grand Central D...

  • iOS-多线程:GCD

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

  • 浅析GCD

    GCD目录: 1. GCD简介 为什么要用GCD呢? GCD可用于多核的并行运算GCD会自动利用更多的CPU内核(...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • iOS 多线程--GCD

    一、GCD基本介绍 1.GCD简介 GCD是Grand Central Dispatch的缩写,GCD是苹果推出的...

  • 自用算法模板(JAVA版)

    一、数论 1)GCD GCD(求最大公约数) QGCD(快速GCD) extGCD(拓展GCD,解决ax + by...

网友评论

      本文标题:GCD随笔

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