「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
GCD简介
什么是GCD
全称Grand Central Dispatch,它是C语言的API
GCD优势
- CGD是苹果公司为多核的并行运算提供的方案(iOS4开始)
- GCD会自动利用更多的CPU内核
- GCD会自动管理线程生命周期(创建线程、调度线程、销毁线程),程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理的代码
GCD 任务和队列( queue:队列 block:任务)
GCD 任务
任务:执行操作,也就是在线程中执行的那段代码。在 GCD 中是放在 block 中的。执行任务有两种方式:同步执行 和 异步执行
-
同步执行
同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等待,直到队列里面的任务完成之后,才会继续执行接下来的其他逻辑
dispatch_sync(dispatch_queue_t _Nonnull queue, <^(void)block>) -
异步执行
异步添加任务到指定的队列中,它不会等待任务执行结束,只要将任务加入队列,就可以继续执行接下来的其他逻辑
dispatch_async(dispatch_queue_t _Nonnull queue, <^(void)block>) -
同步和异步的区别
- 同步:只能在当前线程中执行任务,不具备开启新线程的能力
- 异步:可以在新的线程中执行任务,具备开启新线程的能力
GCD 队列
队列:用来存放任务的队列。队列是一种特殊的线性表,采用 FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。GCD 有两种队列:串行队列 和 并发队列
-
并发队列:可以开启多个线程,并且让多个任务同时执行。并发功能只有在异步
dispatch_async方法下才有效 -
串行队列:只开启一个线程,任务一个接着一个执行
注:
有四个容易混淆的概念:同步、异步、并发、串行
- 同步 和 异步 主要影响能不能开线程
- 串行 和 并行 主要影响任务的执行方式
GCD使用
- 创建一个队列(串行队列或并发队列)
- 将任务追加到任务的等待队列中,然后系统就会根据任务类型执行任务(同步执行或异步执行)