1.gcd简介
- GCD是苹果公司为多核的并行运算提出的解决方案
- GCD会自动利用更多的CPU内核(比如双
- 全称是Grand Central Dispatch
- 纯C语言的,提供了非常多强大的函数
- 核、四核)
- GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
- 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
2.gcd 核心:将任务添加到队列
任务:执行什么操作(方法或者函数)
队列:存放任务的数据结构
使用步骤:
1.创建任务
2.将任务添加到队列中
3.队列的类型:
串行队列:特点 任务一个一个按照顺序执行(完成一个任务才能从队列中去下一个任务)
并发队列:特点 可以同时调度多个任务并发执行 并发功能只有在异步函数的情况下才有效果
- 同步的方式执行任务:在当前线程中依次执行任务
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
queue:队列
block:任务
- 异步的方式执行任务:新开线程,在新线程中执行任务
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
- 如果将异步任务添加到并发队列中,同时底层线程池有可用的线程资源,CPU就会调度新线程执行异步任务
//并发队列 同步执行
- (void)testGcd1
{
//创建队列
dispatch_queue_t queue = dispatch_queue_create("test1", DISPATCH_QUEUE_CONCURRENT);
//创建任务
for(int i=0;i<10;i++)
{
dispatch_sync(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//并发队列 异步执行
- (void)testGcd2
{
dispatch_queue_t queue = dispatch_queue_create("test2", DISPATCH_QUEUE_CONCURRENT);
for(int i=0;i<10;i++)
{
dispatch_async(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//串行队列 同步执行
- (void)testGcd3
{
//创建队列
dispatch_queue_t queue = dispatch_queue_create("test3", DISPATCH_QUEUE_SERIAL);
//创建任务
for(int i=0;i<10;i++)
{
dispatch_sync(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}
//串行队列 异步执行
- (void)testGcd4
{
dispatch_queue_t queue = dispatch_queue_create("test4", DISPATCH_QUEUE_SERIAL);
for(int i=0;i<10;i++)
{
dispatch_async(queue, ^{
NSLog(@"%@ ----- %d",[NSThread currentThread],i);
});
}
}