GCD:grand center dispatch(伟大的中枢调度器),打开GCD的包文件 <dispatch/dispatch.h>可以看到它的组成如图:
下面介绍这几个东西的用法.
一:<dispatch/once.h>
这个东西我们常常用在单例的位置上,常见用法如下
主要用于确保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中给出了一个全局的队列供我们使用:
这里同样有两个参数:第一个参数,从苹果文档可以看到该参数用于提高任务的执行质量,设置任务的优先级,它有四个可选参数:从上到下优先级依次降低,主要用于标注该队列的优先级,苹果官方建议我们填0,也就是default模式,因为通过dispatch_queue_creat创建的队列就是取default来创建的.
第二个参数是苹果留给未来的,我们一直填0,就可以了.
三:同步或者异步任务
dispatch_async(<#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>)
dispatch_sync(<#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>)
在这里我们需要区分一下四个名次的概念,以免混淆:同步,异步,并发,串行.
<同步和异步>表示的是有没有开启多线程的能力,即是否允许开启多线程.
<并发和串行>指的是队列中任务的执行方式.
<需要强调的是>并不是并发队列一定会开启多线程,只有当并发队列中加入了具有开启多线程能力的异步任务之后才会开启分线程.
而异步任务也不一定是在多线程处理,只有将他放在允许他使用并发方式执行的队列中,他才能多线程执行.否则只能是分线程顺序处理
<也就是说> 同步和异步,允不允许开多线程..并发和串行,要不要开多线程..
以上介绍不懂的请我吃饭,咱们好好唠唠.接下来我们看一下这两个东西,发现真的没啥好说的,参数一:放入的队列..参数二:任务的代码..