GCD笔记

作者: 浅浅_e90e | 来源:发表于2020-04-03 11:56 被阅读0次

队列分类:

一、串行队列

手动创建的串行队列,里面的任务只能一个挨着一个顺序执行,最多允许开启1条新线程

与同步和异步的关系

串行同步:没有启动新线程,所有任务都由当前线程完成,做完一个再做另一个,完全顺序执行,不论是block块外的任务还是块内的任务,一视同仁

串行异步:另外开启了一条新线程,所有的block块任务都搬到这条新线程上完成,而当前线程会执行放在block块外的其他任务,两个线程一起干活,但特殊的是,由于串行队列的性质,只能线程A做完了一个任务后线程B才能开始做任务,等线程B做完一个任务,线程A才能继续做任务,但做任务的速度是不一定,所以可以看到结果是两个线程的任务是穿插着没有顺序完成的

主队列:一个特殊的串行队列,只有主线程一个线程做任务,不管同步异步都要先执行完主线程里的任务再执行主队列里的任务,只有当主线程的任务执行完毕后,主队列才会调度任务到主线程执行,主线程一般都是按照代码行序执行任务,但主队列要求主线程上的任务要优先完成,所有会造成互相等待,比如:

主队列同步死锁

如图所示,主队列要求主线程上的任务优先完成,比如打印A,打印B,loadUI方法的执行,最后再去做同步block块里的打印任务,但主线程做任务的时候按顺序执行,当开始做任务时候,就按顺序,第一遍遍历时候遇到了同步任务,就要开始执行,但主队列要求这个任务放在最后执行,先执行下面的任务,所以造成相互等待,如果实在无法理解,就记住主队列同步这种情况不能用!!!

如果是自创的普通串行队列,则不会出现这种情况,串行同步会按照代码行序,顺序执行任务,即便是耗时操作排在主线程任务前面,也会按顺序先完成耗时任务后才会继续往下执行新任务。

二、并发队列

可以启动多个线程的一种队列,如果启动了多条线程,那多个线程一起做任务,有可能任务会同时完成,最多可以启动64条,哪个线程先做完手头的任务会继续去找未完成的任务去完成

并发同步:没有开启新线程,所有任务只能由当前线程自己完成所有任务,不论是block块内任务还是块外任务,一视同仁,顺序完成,效果同串行同步一模一样

并发异步:开启多个线程一起做任务,相当于雇佣很多个工人一起干活,动作快的,做完再去拿新任务,任务无序完成,一般开发过程中需要耗时的下载任务都使用这种方式执行

全局队列,系统自带的一种并发队列,直接获取就可以,一般如果需要多线程执行任务,直接获取这个全局队列开启多线程任务即可,无需自己创建并发队列,同步和异步的效果同并发同步和异步效果一致

相关文章

  • iOS多线程-GCD 附带GCD相关代码

    多线程学习笔记-GCD 我把这篇文章所用到的代码总结到这里->GCD项目总结下载地址-GCD-wxk可以下载参考 ...

  • Swift 4 Cheat Sheet Advanced

    Swift 4 Cheat Sheet Advanced @(编程笔记)[Swift] Singleton GCD...

  • 关于gcd

    这几天有点时间,就把gcd研究了一下。现把心得和笔记记录如下 gcd常用的api,dispatch_queue_c...

  • GCD笔记

    一、Dispatch Queue的分类 按照执行处理的方式分为两类: 二、Dispatch Queue的生成方式 ...

  • GCD笔记

    一 GCD 的好处:1)GCD 可用于多核的并行运算2)GCD 会自动利用更多的 CPU 内核(比如双核、四核)...

  • GCD笔记

    线程里面是队列,队列里面是任务。 应用程序至少有一个线程(主线程main) 1.同步与异步: 同步在当前线程执行任...

  • GCD笔记

    说明 Grand Gentral Dispatch(GCD) 异步执行任务的技术之一。将应用程序中记述的线程管理用...

  • GCD笔记

    dispatch_async(dispatch_get_main_queue(),^(){[NSThread sl...

  • GCD 笔记

    Grand Central Dispatch GCD 是异步执行任务的技术之一,提供系统级线程管理,具有高执行效率...

  • GCD笔记

    队列分类: 一、串行队列 手动创建的串行队列,里面的任务只能一个挨着一个顺序执行,最多允许开启1条新线程 与同步和...

网友评论

      本文标题:GCD笔记

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