iOS-多线程-GCD
来源:互联网 发布:快跑者抢单软件 编辑:程序博客网 时间:2024/06/05 13:24
一,GCD
1,什么是GCD
GCD是苹果公司为多核的并行运算提出的解决方案
GCD会自动利用更多的CPU内核(比如双核,四核)
GCD会自动管理线程的生命周期(创建线程,调度任务,销毁线程)
程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
2,GCD加入了任务和队列两个概念:
任务:
同步执行:在当前任务执行,不会另开线程
异步执行:会开线程,在另外线程执行
队列:
串行:先进先出,一个一个执行
并行:同步任务,一个一个执行;异步任务,开线程,一起执行
3,代码:
(1)用异步函数往并发队列中添加任务
总结:同时开启三个子线程
//1.获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中,就可以执行任务 //异步函数:具备开启新线程的能力 dispatch_async(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); }); //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]);
(2)用异步函数往串行队列中添加任务
总结:会开启线程,但是只开启一个线程
//打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_queue_create("wendingding", NULL); //第一个参数为串行队列的名称,是c语言的字符串 //第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL) //2.添加任务到队列中执行 dispatch_async(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); });
(3)用同步函数往并发队列中添加任务
总结:不会开启新的线程,并发队列失去了并发的功能
//打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中执行 dispatch_sync(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); });
(4)用同步函数往串行队列中添加任务
总结:不会开启新的线程
NSLog(@"用同步函数往串行队列中添加任务"); //打印主线程 NSLog(@"主线程----%@",[NSThread mainThread]); //创建串行队列 dispatch_queue_t queue= dispatch_queue_create("wendingding", NULL); //2.添加任务到队列中执行 dispatch_sync(queue, ^{ NSLog(@"下载图片1----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片2----%@",[NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"下载图片3----%@",[NSThread currentThread]); });
0 0
- IOS 多线程 GCD
- GCD ios多线程 runloop
- ios学习 -- GCD多线程
- iOS多线程GCD
- iOS GCD 多线程
- iOS多线程GCD
- iOS多线程GCD
- GCD ios多线程 runloop
- iOS 多线程之----------GCD
- IOS多线程之GCD
- iOS多线程GCD
- iOS 多线程3 GCD
- IOS多线程GCD
- GCD ios多线程 runloop
- IOS 多线程之GCD
- ios多线程-GCD
- iOS多线程GCD
- GCD ios多线程 runloop
- jdk,cglib代理
- 解决xml sql多层()不能解析问题
- c语言内存四区(-)
- 数据库<5>
- tiles装饰集成
- iOS-多线程-GCD
- 缓存的切换
- caffe下cnn调试中碰到Check failed: ReadProtoFromBinaryFile(param_file, param) Failed to parse NetParameter
- 教你如何在机器学习竞赛中更胜一筹(上)
- form ajax提交返回html直接嵌入
- 快速功能点方法
- jsp,xml中el表达式等占位符中的数据操作
- Java集合与JSON集合之间的转换
- 0.