GCD汇总
//总结如下:
//1.同步请求:不会开启新的线程
//1-1.同步请求--串行队列:不开启新线程--按照顺序执行下去
//1-2.同步请求--并发列队:不开启新线程--按照顺序执行下去 //2.异步请求:会开启新的线程
//2-1.异步请求--串行队列:开启一条新线程--按照顺序执行下去
//2-2.异步请求--并发队列:每条请求开启一条新线程--无顺序执行 //3.主线程
//主线程上面的请求都会在主线程上面执行
//3-1.异步请求:在主线程上面不会开启新的线程--按照顺序执行下去
//3-2.同步请求:卡死 当触发同步请求的时候会立即触发这个方法,但是上面的方法还需要往下面走,相互之间卡死了。 - (void)viewDidLoad {
[super viewDidLoad]; [self test8]; }
// <NSThread: 0x7fd2c3c088a0>{number = 1, name = main}
// 2><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
// 4><NSThread: 0x7fd2c3c9a6a0>{number = 4, name = (null)}
// 3><NSThread: 0x7fd2c3e0c4b0>{number = 3, name = (null)}
// 1><NSThread: 0x7fd2c3e0d570>{number = 5, name = (null)}
// 5><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
//异步队列--异步请求
//会创建新的线程--线程之间的执行时是并发的
-(void)test1{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 1><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 2><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 3><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 4><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 5><NSThread: 0x7fd5bac04910>{number = 1, name = main}
//异步队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test2{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 1><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 2><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 3><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 4><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 5><NSThread: 0x7fed50d07b50>{number = 1, name = main}
//串行队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test3{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7faa8a606430>{number = 1, name = main}
// 1><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 2><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 3><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 4><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 5><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
//串行队列--异步请求
//开启了一条新的线程--按照顺序执行
-(void)test4{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 1><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 2><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 3><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 4><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 5><NSThread: 0x7fe849c048f0>{number = 1, name = main}
//主线程--异步请求
//不会开启新的线程,都是在主线程上面执行的
-(void)test5{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe881501cc0>{number = 1, name = main}
//主线程--同步请求
//卡主线程
-(void)test6{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fc70a7023c0>{number = 1, name = main}
// 2><NSThread: 0x7fc70a443ac0>{number = 2, name = (null)}
// 3><NSThread: 0x7fc70a61a740>{number = 4, name = (null)}
// 1><NSThread: 0x7fc70a70ea60>{number = 3, name = (null)}
// done //开启多条线程
//统一完成后 -(void)test7{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
}); dispatch_group_notify(group, queue, ^{
NSLog(@"done");
});
}
GCD汇总的更多相关文章
- GCD使用汇总
本文目录 dispatch_queue_t.dispatch_block_t dispatch_sync.dispatch_async dispatch_set_target_queue.dispat ...
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- GCD-两个网络请求同步问题
在网络请求的时候有时有这种需求 两个接口请求数据,然后我们才能做最后的数据处理.但是因为网络请求是移步的 .我们并不知道什么时候两个请求完成 . 通常面对这样的需求会自然的想到 多线程 啊 .表现真正 ...
- GCD的简单用法
/* 创建一个队列用来执行任务,TA属于系统预定义的并行队列即全局队列,目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们 四种优先 ...
- iOS多线程 GCD常见用法
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- GCD的使用
什么是 GCD Grand Central Dispatch (GCD) 是 Apple 开发的一个多核编程的解决方法.该方法在 Mac OS X 10.6 雪豹中首次推出,并随后被引入到了 iOS4 ...
- iOS多线程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- iOS学习之GCD
多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新U ...
- IOS中的多核并发编程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
随机推荐
- poj万人题
poj提交数量过万的题,除了水爆了的题就是无比经典的,不得不刷的题. 准备将poj上提交次数过万的题刷个遍. 持续更新中... poj 2828(线段树) 此题乃是Zhu, Zeyuan神牛出的,拿到 ...
- MySQL5.7安装及遇到的问题
Mysql安装教程: mysql历史版本下载 将在官网下载的安装包解压(如:如D:\mysql-5.7.19-x64) 1.(修复问题Q1时必做,全新安装时不要删除)在mysql的安装路径(如D:\ ...
- C# .net 数组倒序排序
1.数组方法 Array.Sort(Array Array); 此方法为数组的排序(正序)方法 Array.Reverse(Array Array); 此方法可以将数组中的值颠倒 两个方法结合使用 ...
- 关于redux应用
redux 有点类似flux.但是我觉得远比flux要复杂.因为他非常的绕.一般搭配使用是redux 和react-redux 使用. 主要的思路就是: 写action:动作类型 写reducer:动 ...
- jquery点击div以外的区域触发事件
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- 单源最短距离 Single Source Shortest Path
单源最短距离_示例程序_图模型_用户指南_MaxCompute-阿里云 https://help.aliyun.com/document_detail/27907.html 单源最短距离 更新时间:2 ...
- 会议室预订 - 对td的处理以区分预订者
w 待处理
- Virtualbox报错------>make sure the kernel module has been loaded successfully
错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...
- web 开发常见问题--Session 与 Cookie 却别
总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...