CGD全局并发队列和主队列的应用
来源:互联网 发布:厦门众途软件 编辑:程序博客网 时间:2024/05/21 07:57
*
1. 主队列特点 :主队列中的任务,只有主线程空闲的时候才会被调度
2. 主队列又叫全局串行队列,程序启动的时候就创建了主队列,在使用的时候不需要创建,直接GET.
2. 主队列中的任务一定是要在主线程执行的.
*/
pragma mark - 主队列+同步任务
// 不能向主队列中添加同步任务,会死锁
- (void)GCDDemo2{ // 获取主队列 dispatch_queue_t queue =dispatch_get_main_queue(); dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 创建同步任务 void (^task)() = ^ NSLog(@"%@",[NSThreadcurrentThread]); }; // 将同步任务添加到主队列 dispatch_sync(queue, task); // NSLog(@"hello"); });}
注意:因为主队列的任务是当主线程空闲的时候才会调用,所以将同步任务添加到主队列时,会造成造成死锁;
•死锁的原因
•主队列:如果主线程正在执行代码,就不调度任务
•同步执行:如果第一个任务没有执行,就继续等待第一个任务执行完成,再执行下一个任务此时互相等待,程序无法往下执行(死锁)
pragma mark - 主队列+异步任务
// 不开线程
- (void)GCDDemo1{ // 获取主队列 dispatch_queue_t queue =dispatch_get_main_queue(); // 创建异步任务 void (^task)() = ^{ NSLog(@"%@",[NSThreadcurrentThread]); }; // 将异步任务添加到主队列 // 异步任务不占用主线程 dispatch_async(queue, task); NSLog(@"hello");}
全局并发队列本质就是并发队列
dispatch_get_global_queue(0,0);
全局队列和并发队列的区别
并发队列有名称,可以跟踪错误,全局队列没有
在ARC中不需要考虑释放内存, dispatch_release(q);不允许调用。在MRC中需要手动释放内存,并发队列是create创建出来的 在MRC中见到create就要release,全局队列不需要release(只有一个)
一般我们使用全局队列,因为使用起来更加简单
/// 演示 全局并发队列- (void)GCDDemo{ // 获取全局并发队列 // 程序一启动就创建好的 // 参数2 : 苹果不知道这个参数干什么的,预留着以后升级用的. // 参数1 : iOS7.0及以前,代表队列的优先级,iOS8.0及以后,代表服务质量 // 开发中建议使用全局并发队列 dispatch_queue_t global_queue = dispatch_get_global_queue(0, 0);// DISPATCH_QUEUE_PRIORITY_DEFAULT // QOS_CLASS_UNSPECIFIED // 创建自定义的并发队列 dispatch_queue_t con_queue = dispatch_queue_create("cz", DISPATCH_QUEUE_CONCURRENT);// dispatch_release(con_queue);}
线程间通信
#pragma mark - 线程间的通信- (void)GCDDemo4{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 耗时操作 NSLog(@"努力下载... %@",[NSThread currentThread]); // 回到主线程更新UI dispatch_async(dispatch_get_main_queue(), ^{ // 回到其他线程 NSLog(@"更新UI... %@",[NSThread currentThread]); }); });}
0 0
- CGD全局并发队列和主队列的应用
- 全局队列/主队列/
- GCD 串行队列,并发队列和主队列的整理
- GCD 串行队列,并发队列和主队列的整理
- GCD主队列死锁和全局队列
- 主队列,全局队列,并发队列关系比较
- GCD主队列、全局队列
- GCD之主队列、全局并发队列、以及同步任务的执行
- GCD编程中的主队列和全局队列
- CCD详细介绍(二) 全局队列和主队列 各种任务的执行效果
- GCD全局队列与主队列
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- ios多线程操作(六)—— GCD全局队列与主队列
- APP发布的图文教程
- sql按字段值进行统计
- C# Redis Server分布式缓存编程(一)
- LeetCode *** 31. Next Permutation
- django的url 正则表达
- CGD全局并发队列和主队列的应用
- Android控件构架
- Swift闭包
- 适配
- C++第四次实验
- Android学习资料整理(三)
- Spring security 和 Spring session 一起使用
- 上传jar包到nexus私服
- Spinner下拉选项实现(配置文件方式和自定义adapter方式)