GCD概念理解

GCD 核心概念:将任务添加到队列,指定任务的执行方法

为什么要用 GCD 呢?具体如下:

  • GCD 可用于多核的并行运算
  • GCD 会自动利用更多的 CPU 内核(比如双核、四核)
  • GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
  • 程序员只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码

任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。使用Block封装。

队列(Dispatch Queue):负责调度任务 。

队列是一种特殊的线性表,采用 FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。队列的结构可参考下图:


 

  • 串行队列(Serial Dispatch Queue)
    • 每次只有一个任务被执行。让任务一个接着一个地执行。(只开启一个线程,一个任务执行完毕后,再执行下一个任务)
  • 并发队列(Concurrent Dispatch Queue)
    • 可以让多个任务并发(同时)执行。(可以开启多个线程,并且同时执行任务)

两者都符合 FIFO(先进先出)的原则。两者的主要区别是:执行顺序不同,以及开启线程数不同。
 

任务执行函数:任务都需要在线程中执行

  • 同步执行(sync):当前任务不完成,不会执行下个任务
  • 异步执行(async):当前任务不完成,不会等待,继续执行下个任务

两者的主要区别是:是否等待队列的任务执行结束,以及是否具备开启新线程的能力。

GCD的基本使用 :

区别 并发队列 串行队列 主队列
同步(sync) 没有开启新线程,串行执行任务 没有开启新线程,串行执行任务 主线程调用:死锁卡住不执行
其他线程调用:没有开启新线程,串行执行任务
异步(async) 有开启新线程,并发执行任务 有开启新线程(1条),串行执行任务 没有开启新线程,串行执行任务

猜你喜欢

转载自blog.csdn.net/LIN1986LIN/article/details/85988888
gcd