GCD笔记1->GCD的API

苹果官方对gcd的说明:

Dispatch Queue

开发者要做的只是定义想执行的任务并追加到适当的dispatch queue中。

这句话用源代码表示如下:

  dispatch_async(queue, ^{
        //想执行的任务
    });

该源代码使用block语法,定义想执行的任务,通过dispatch_async函数追加赋值在变量queue的dispatch queue(派发队列)中。仅这样就可以指定block在另一线程中执行。

那么Dispatch Queue是什么呢?

是执行处理的等待队列,应用程序编程人员通过dispatch_async函数等API,在block语法中记述想执行的处理并将其追加到Dispatch Queue中。

Dispatch Queue按照追加的顺序(先进先出),执行处理。

在执行处理时,存在两种Dispatch Queue,

一种是等待现在执行中处理的serial Dispatch Queue

另一种是不等待现在执行中处理的Concurrent Dispatch Queue。

从字面意思,我们也可以好好理解这两种队列的性质

serial是“连续的”,典型用法是连续剧(一集接着一集,不是多集同时播放)。

Concurrent 是“同时发生的”的意思。

来看一段伪代码

    dispatch_async(queue, block0);
    dispatch_async(queue, block1);
    dispatch_async(queue, block2);
    dispatch_async(queue, block3);
    dispatch_async(queue, block4);
    dispatch_async(queue, block5);
    dispatch_async(queue, block6);
    dispatch_async(queue, block7);

当queue为serial Dispatch Queue时,如同连续剧一样,先执行block0,等到block0执行完毕后,再执行block1,如此重复。

同时执行的处理数只能有1个,即执行该源代码后,一定按照顺序进行处理。

感觉是串行

    block0
    block1
    block2
    block3
    block4
    block5
    block6
    block7

当变量queue为Concurrent Dispatch Queue时,不用等待现在执行中的处理结束,首先执行block0,不管block0执行是否结束,都开始执行block1,不管是否执行完毕,都开始执行block2,如此重复循环。

这样虽然不用等待处理结束,可以并行执行各个处理,但是并行执行的处理数量取决于当时系统的状态,即iOS基于派发队列

的处理数,cpu的核心数及cpu负荷等当前系统状态来决定 派发队列中并行执行的处理数,所谓并行执行,就是使用多个线程同时执行多个处理。

执行顺序会根据处理内容和系统状态发生改变。

在不能改变执行顺序或者不想并行执行,使用serial Dispatch Queue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值