GCD

1. GCD(不是面向线程对象,面向任务开发)

全称是Grand Central Dispatch,NB的中枢调度器 / 大中央调度  ——— 任务派发器

 纯C语言,提供了非常多强大的函数

将任务添加到队列中,选择恰当的执行函数来执行队列中的任务,以此开启线程,保证任务的执行顺序

2. 优势
GCD是苹果公司为多核的并行运算提出的解决方案
GCD会自动利用更多的CPU内核(比如双核、四核)
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
3. 任务和队列
(1)队列:队列用来存放任务,队列遵循(FIFO)先进先出原则;
GCD中ti拱了四种队列:
串行队列和并发队列是需要手动创建的
1>串行队列:用来存放想要按顺序执行的任务
2>并发队列:用来存放想要同时执行的任务
全局并发队列和主队列是系统已经创建好的,不需要手动创建
3>全局并发队列:作用和并发队列基本一样,是系统提供的,不需要手动创建
4>主队列:用来存放在主线程执行的任务
(2)任务:需要执行的代码,将任务封装在block中;一个GCD中的block就是一个任务
(3)执行函数:执行函数和队列配合使用,来开启线程,确定任务的执行顺序
  同步函数:不具备开启线程的能力,在当前线程执行,达到同步的目的
  异步函数:具备开启线程的能力,但是是否开启线程还需要和队列配合使用,达到异步的目的
4. 队列和执行函数的组合
(1)串行队列 + 执行函数
同步函数 + 串行队列:不会开启新线程,任务按顺序执行
异步函数 + 串行队列:会开启一条线程,任务按顺序执行
(2)并发队列 + 执行函数
同步函数 + 并发队列:不会开启新线程,任务按顺序执行
异步函数 + 并发队列:会开启多条线程,任务同时执行
(3)主队列 + 执行函数
同步函数 + 主队列:卡主主队列
异步函数 + 主队列:不会开启线程,任务在主线程按顺序执行
5. 队列组:保证任务的执行顺序
  dispatch_group_t group = dispatch_group_create();
  dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
    // 并行执行的线程一
  });
  dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
    // 并行执行的线程二
  });
  dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
    // 并行执行的线程三
  });
  dispatch_group_notify(group,dispatch_get_global_queue(0,0),^{
    // 结果汇总
  });
 
posted @ 2016-09-18 15:11  简简单单0  阅读(208)  评论(0编辑  收藏  举报