文章分享至个人我的技术博客: https://cainluo.github.io/15018603425788.htmlhtml
GCD
为Grand Central Dispatch
的缩写。git
Grand Central Dispatch (GCD)
是苹果爸爸开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其余对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6
雪豹中首次推出,也可在iOS 4
及以上版本使用。程序员
在iOS
开发中, 咱们都知道除了GCD
还有NSThread
, NSOperation & NSOperationQueue
, 加上原本就是基于Unix
系统的Pthreads
, 这里就很少说了, 只讲GCD
.github
GCD
能够用在多核并行运算GCD
会自动利用更多的CPU内核, 不会有一核有难, 九核围观的状况.GCD
会自动管理线程的生命周期, 好比建立线程, 调度任务, 销毁线程等等操做.GCD
很是的简单, 只须要告诉它去执行什么任务就行了, 管理线程什么的都去死吧.转载声明:如须要转载该文章, 请联系做者, 而且注明出处, 以及不能擅自修改本文.编程
这里要普及两个核心思想: 任务, 队列.微信
所谓的任务, 就是指咱们程序员放在
GCD
里的操做, 通常是用Block
方式进行, 这里有两种执行任务的操做,同步执行
和异步执行
, 两个的区别就是在是否开启新线程进行操做.app
同步执行: 在GCD
里是sync
, 不会开启新线程, 只会在当前线程进行操做. 异步执行: 在GCD
里是async
, 能够另外开启一个新的线程执行任务.异步
队列指的是任务队列, 用来存听任务的队列, 能够说队列是一种比较特殊的线性表, 采用的是先进先出(FIFO)原则, 就像是出高速公路收费站同样, 从最前面一个开始, 排在前面的车子交了费先走, 才到下一个, 这里的队列分为两种,
并行队列
和串行队列
.async
并行队列: 全名为Concurrent Dispatch Queue
, 指的是可让多个任务同时执行, 若是用到并行队列的话, 是会自动开启多个线程同时执行任务. 串行队列: 全名Serial Dispatch Queue
, 指的是任务一个接一个的执行, 完成了前面的那个就到后面那个, 和咱们刚刚举的收费站例子同样.优化
注意: 并行队列只有在异步执行(dispatch_async)才有效.
其实GCD
的使用很是简单, 两步就完成了.
OK
咱们先来看看队列, 任务的建立方法.
dispatch_queue_create
来建立对象, 这里须要传入两个参数.
DISPATCH_QUEUE_SERIAL
表示串行队列, DISPATCH_QUEUE_CONCURRENT
表示并行队列.// 串行队列的建立方法
dispatch_queue_t queue= dispatch_queue_create("Test.queue", DISPATCH_QUEUE_SERIAL);
// 并行队列的建立方法
dispatch_queue_t queue= dispatch_queue_create("Test.queue", DISPATCH_QUEUE_CONCURRENT);
复制代码
dispatch_get_global_queue
来建立全局并行队列
, 也须要传入两个参数.
DISPATCH_QUEUE_PRIORITY_DEFAULT
.0
去代替.// 同步执行任务建立方法
dispatch_sync(queue, ^{
// 这里听任务代码
});
// 异步执行任务建立方法
dispatch_async(queue, ^{
// 这里听任务代码
});
复制代码
基本上这样子就算搞定了, 虽然咱们这里就只有两种队列, 但组合起来, 也是很多的:
再另外加上一种叫作主队列
的特殊队列, 那就又多了两种组合:
这里咱们能够看一个表格, 更加的清晰知道各个组合的区别:
并行队列 | 串行队列 | 主队列 | |
---|---|---|---|
同步执行(sync) | 不开启新线程, 串行方式执行任务 | 不开启新线程, 串行方式执行任务 | 不开启新线程, 串行方式执行任务 |
异步执行(async) | 开启新线程, 并行方式执行任务 | 开启1条新线程, 串行方式执行任务 | 不开启新线程, 串行方式执行任务 |
关于GCD
的基本知识, 就讲到这里吧, 更详细的, 后续的文章再补上, 或者能够去看看GCD官方文档本身撸撸也ok~~