GCD-9

2016-05-29  本文已影响49人  Sunney

什么是GCD

全称是 Grand Central Dispatch 可译为“伟大的中枢调度器

纯 C语言

GCD是苹果公司为多核的并行运算提出的解决方案

GCD会自动利用更多的CPU内核(比如双核、四核)

GCD会自动地管理线程的生命周期(创建线程、调度线程、销毁线程)

程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

任务和队列

GCD中有两个核心任务

任务:执行什么操作

队列:用来存放任务

GCD的使用就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的队列可以分为2大类型

并发队列(Concurrent Dispatch Queue)

可以让多个任务并发(同时)执行,自动开启多个线程同时执行任务

并发功能只有在异步函数下才有效

串行队列(Serial Dispatch Queue)

让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)

容易混淆的术语

有4个术语比较容易混淆:同步、异步:并发、串行

同步和异步主要影响:能不能开启新的线程

同步:只是在当前线程中执行任务,不具备开启新线程的能力

异步:可以在新的线程执行任务,具备开启新线程的能力

并发和串行主要影响:任务的执行方式

并发:(必须使用异步才能实现并发)允许多个任务并发(同时)执行

串行:一个任务完毕后,再执行下一个任务

使用dispatch_queu_create函数创建

dispatch_queue_t

dispatch_queue_create(const char *label,//队列的名称

dispatch_queue_attr_t attr)//队列的类型

创建并发队列:

dispatch_queue_t queue= dispatch_queue_create("com.520it.queue",DISPATCH_QUEUE_CONCURRENT);

代码实现部分:

- (void)viewDidLoad{

[super viewDidLoad];

}

- (void)touchesBegan:(NSSet *)touches withEvent :(UIEvent *)event{

//创建一个并发队列

//label:相当于队列的名字

//attr队列的类型

dispatch_queue_t queue = dispatch_queue_create("www.queue", DISPATCH_QUEUE_CONCURRENT);

//将任务添加到队列中

dispatch_async(queue,^{

for(NSInteger i = 0; i < 10; i++){

NSLog(@"1-=======================%@",[NSThread currentThread]);

}

});

dispatch_async(queue,^{

for(NSInteger i = 0; i < 10; i++){

NSLog(@"2-=======================%@",[NSThread currentThread]);

}

});

dispatch_async(queue,^{

for(NSInteger i = 0; i < 10; i++){

NSLog(@"3-=======================%@",[NSThread currentThread]);

}

});

}

上一篇下一篇

猜你喜欢

热点阅读