Gcd
什么是gcd
全称 Grand Central Dispatch 可译为 中枢调度器
纯c语言
优点:
苹果公司为多核的并行运算提出的解决方案
gcd会自动利用更多的cpu内核
gcd会自动管理线程的生命周期(创建线程、调度任务、销毁线程 )
程序员只需要告诉gcd想要执行什么任务,不需要编写任何线程管理代码
gcd 核心概念
任务和队列
任务:执行什么操作
队列:用来存放任务
gcd的使用2个步骤
1、定制任务 确定想做的事情
2、将任务添加到队列中去
gcd会自动将队列中的任务取出,放到对应的线程中执行
任务的取出遵循队列和fifo 原则:先进先出
执行任务:
gcd有两个方式来执行任务的函数
1.用同步的方式执行任务
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
queue:队列
block:任务 块
表示是在同一个线程,不具备开启新线程的功能
2.用异步的方式执行任务
dispatch_async(<dispatch_queue_t queue>, dispatch_block_t block)
表示 是新起一个线程,具有开启新线程的功能
gcd队列类型
gcd的队列可以分为两个类型
1.并发队列
可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)
并发功能只能在异步函数(dispatch_async)下才有效;
eg:在异步方法
//获取全局的并发队列 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
//DISPATCH_QUEUE_PRIORITY_DEFAULT 表示优先级
dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
//NSThread currentThread 显示所在的线程
NSLog(@"========%@",[NSThread currentThread]);
});
回到主线程 dispatch_get_main_queue
eg:
dispatch_async(dispatch_get_main_queue,^{
所执行的业务
})
2.串行队列
让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
同步和异步
gcd 完成一次性代码执行
dispatch_once
gcd 延迟操作
dispatch_after