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

posted @ 2015-08-06 12:07  Lee_M  阅读(222)  评论(0编辑  收藏  举报