GCD
全称是Grand Central Dispath 被译牛逼的中枢调度器
它是用纯c语言编写的函数库,为苹果多核并行运行提供解决方案
优点:能够更多的使用多核心
自动管理线程的生命周期,创建线程,调度线程,销毁线程,
程序猿只需要告诉做什么任务就行了,不需要编写线程相关的代码
GCD中有两个用来执行任务的常用函数
同步:必须在当前线程中执行任务,不具备开启新线程的能力
异步:可以在新线程中执行任务,具备开启新线程的能力
sync
async
GCD 的队列可以分为2个类型
并发队列
可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)
并发功能在异步函数下才有效
同步函数 并发队列 不开启新线程 任务串行执行任务
异步函数 并发队列 开启新线程 同时任务执行
同步函数 串行队列 不开启新线程 任务串行执行
异步函数 串行队列 开启一条线程 任务串行执行
全局并发队列
异步函数 下 开启新线程 任务并发执行
同步函数下 不开启新线程 任务串行执行
主队列 是 特殊串行队列
同步函数:会发生死锁
异步函数:不会开启新的新线程,不会发生死锁,串行执行任务
GCD线程间的通信 就是回到主线程中刷新UI
快速迭代 dipath_apply
dispatch_apply(33,dispatch_get_global_queue(0,0), ^(size_t i) {
NSLog(@"%d---%@",i,[NSThreadcurrentThread]);
});
队列组
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
NSLog(@"队列组1");
});
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
NSLog(@"队列组2");
});
dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{
NSLog(@"队列组结束");
});