美文网首页
多线程之GCD概述

多线程之GCD概述

作者: 梦里桃花舞倾城 | 来源:发表于2019-02-28 13:50 被阅读0次

1.GCD简介

它是苹果推出的一套多线程解决方案,会合理的利用CPU、自动管理线程的生命周期。使用时只需要在block中写入需要执行的代码即可。非常灵活!

GCD的源码libdispatch版本很多,源代码风格各版本都有不同,但大体逻辑没有太大变化。libdispatch的源码下载地址在这里

为什么要用GCD

  • GCD可用于多核的并行运算
  • GCD会自动利用更多的CPU内核(比如双核、四核)
  • GCD会自动管理线程的生命周期(比如:线程创建、线程任务调度、线程销毁)

2.GCD任务和队列

任务:

就是你需要执行的操作(即block代码块里面的内容)。执行任务有两种方式:同步执行异步执行

  • 同步任务sync

    • 当前指令不完成,不会执行下个指令
    • 只能在当前线程中执行任务,不具备开启新线程的能力
  • 异步任务async

    • 可以同时执行多个指令,不需要等待前一个指令完成
    • 可以在新的线程中执行任务,具备开启新线程的能力。

举个简单例子:你要打电话给小明和小白。

同步执行就是:你打电话给小明的时候,不能同时打给小白,等到给小明打完了,才能打给小白(等待任务执行结束),而且只能用当前的电话(不具备开启新线程的能力)。
而异步执行就是:你打电话给小明的时候,不需要等和小明通话结束,还能直接给小白打电话,不用等着和小明通话结束再打(不用等待任务执行结束)。除了当前电话,你还可以使用其他所能使用的电话(具备开启新线程的能力)。

注意:异步执行(async)虽然具有开启新线程的能力,但是并不一定开启新线程。这跟任务所指定的队列类型有关(下面会讲)。

队列(Dispatch Queue): 用来存放任务,调度任务。队列是一种特殊的线性表,采用FIFO(先进先出)的原则,即新任务总是被插入到任务的末尾,而读取任务总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。

GCD中有两种队列:串行队列并发队列。两者都符合 FIFO(先进先出)的原则。两者的主要区别是:执行顺序不同,以及开启线程数不同。

  • 串行队列(Serial Dispatch Queue):
    • 一个接一个的调度任务(只开启一个线程,一个任务执行完毕后,再执行下一个任务)
  • 并发队列(Concurrent Dispatch Queue):
    • 可以同时调度多个任务(可以开启多个线程,并且同时执行任务)

注意:并发队列的并发功能只有在异步函数(dispatch_async)下才有效

两者主要区别如下图所示:

串行队列.png
并发队列.png
总结:
  • 开不开线程,取决于执行任务的函数,同步不开,异步才能开。
  • 开几条线程,取决于队列,串行开一条,并发可以开多条(异步)。
  • 串行并发是根据任务来的
  • 同步异步是根据线程来说的

原文链接

相关文章

  • 多线程之GCD使用

    上文已经介绍了GCD的一些基本概念多线程操作之GCD概述 GCD 的使用步骤 创建一个队列(串行队列或并发队列) ...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • 7.3 多线程-GCD

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

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

  • 多线程之GCD概述

    1.GCD简介 它是苹果推出的一套多线程解决方案,会合理的利用CPU、自动管理线程的生命周期。使用时只需要在blo...

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

网友评论

      本文标题:多线程之GCD概述

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