一.简介编程
GCD (Grand Central Dispatch)是Apple开发的多核编程的解决方法。app
二.优势异步
1.GCD可用于多核的并行运算async
2.GCD自动利用更多CPU内核(双核,四核)spa
3.GCD自动管理线程的生命周期(建立线程、调度任务、销毁线程) ,只须要告诉GCD想要执行什么任务,不须要编写任何线程管理代码线程
三.使用code
1.建立一个队列(串行队列或并行队列)生命周期
// 串行队列的建立方法队列
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_SERIAL);开发
// 并行队列的建立方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);
//主队列 GCD自带的一种特殊的串行队列
//全部放在主队列中的任务,都会放到主线程中执行
//可以使用dispatch_get_main_queue()
得到主队列
dispatch_queue_t queue = dispatch_get_main_queue();
2.将任务添加到队列中,而后系统就会根据任务类型执行任务(同步执行或异步执行)
// 同步执行任务建立方法
dispatch_sync(queue, ^{
// 这里听任务代码
});
// 异步执行任务建立方法
dispatch_async(queue, ^{
// 这里听任务代码
});
原理图表:
并行队列 | 串行队列 | 主队列 | |
---|---|---|---|
同步(sync) | 没有开启新线程,串行执行任务 | 没有开启新线程,串行执行任务 | 没有开启新线程,串行执行任务 |
异步(async) | 有开启新线程,并行执行任务 | 有开启新线程(1条),串行执行任务 | 没有开启新线程,串行执行任务 |
四.其余使用
GCD的栅栏方法dispatch_barrier_async
GCD的延时执行方法dispatch_after
GCD的一次性代码(只执行一次)dispatch_once
GCD的快速迭代方法dispatch_apply
GCD的队列组 dispatch_group