什么是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]);
}
});
}