iOS GCD dispatch多线程 同步异步
2016-06-08 15:31
489 查看
1.主线程队列是串行的、全局队列是并发的。
2.请求分同步和异步,同步会阻塞当前线程,异步不会。
3.如果队列是串行的,即使是异步,也是一个一个执行,按照添加的顺序执行。
4.如果队列是异步的,同步请求也会使队列一个一个执行,因为同步请求会阻塞当前线程,如果是异步的会并行执行,可以使用优先级来设置执行的优先顺序。
dispatch_sync 同步请求
//异步请求
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});
5.dispatch_barrier_sync(ConCurrentqueue,{})前面的任务并发完成后才会执行这个任务,而这个任务后面的需这个任务执行完之后才会并发执行。
dispatch_barrier_async前面队列中的任务并发执行完之后会执行这个任务,这个队列后面的任务需要这个执行完了之后才会触发,和上面的不同是他是异步的不会等待,如果这个任务下面有别的代码不在队列中的会有可能先执行,而同步的不会必须等这个任务执行完之后才会执行。
6.线程死锁:主要是在串行队列中使用了同步任务,会阻塞当前线程把把任务添加到队尾,等待别的任务执行,而别的任务又需要此任务执行后才能执行就导致死锁,如果当前线程还有别的任务需要小心使用。
2.请求分同步和异步,同步会阻塞当前线程,异步不会。
3.如果队列是串行的,即使是异步,也是一个一个执行,按照添加的顺序执行。
4.如果队列是异步的,同步请求也会使队列一个一个执行,因为同步请求会阻塞当前线程,如果是异步的会并行执行,可以使用优先级来设置执行的优先顺序。
dispatch_sync 同步请求
//异步请求
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});
5.dispatch_barrier_sync(ConCurrentqueue,{})前面的任务并发完成后才会执行这个任务,而这个任务后面的需这个任务执行完之后才会并发执行。
dispatch_barrier_async前面队列中的任务并发执行完之后会执行这个任务,这个队列后面的任务需要这个执行完了之后才会触发,和上面的不同是他是异步的不会等待,如果这个任务下面有别的代码不在队列中的会有可能先执行,而同步的不会必须等这个任务执行完之后才会执行。
6.线程死锁:主要是在串行队列中使用了同步任务,会阻塞当前线程把把任务添加到队尾,等待别的任务执行,而别的任务又需要此任务执行后才能执行就导致死锁,如果当前线程还有别的任务需要小心使用。
相关文章推荐
- iOS中几种数据持久化方案
- iOS label设置 font
- iOS开发之-静态库
- IOS加载PDF文件
- iOS适配:Masonry介绍与使用实践:快速上手Autolayout
- iOS 线程安全之@synchronized的用法
- ios开发静态库生成
- IOS获取设备唯一标识的八种方法
- iOS 收到内存警告的处理过程
- iOS打包.a静态库步骤
- Runtime简单粗暴理解
- 项目适配iOS9遇到的一些问题及解决办法
- ios学习--xcode报错 问题集结号
- iOS 探讨之 动态二维码
- iOS开发中的错误整理,IOS9中canOpenURL调用失败分析
- iOS8 Size Classes的理解与使用
- iOS 极光推送
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
- iOS开发Cocopads的最新用法
- IOS之成员变量,属性变量,局部变量,实例变量,全局变量