关于GCD的一些介绍及相关使用
来源:互联网 发布:混沌与秩序2随从数据库 编辑:程序博客网 时间:2024/05/02 01:19
GCD:Grand Center Dispatch (多线程优化技术),GCD的时候用离不开dispatch,是一套底层的API,基于C语言开发的多线程机制,提供了新的模式编写并发执行的程序
GCD特点:
1.允许将一个程序分为多个单一的任务,提交到工作队列当中,串行或者并发执行
2.配合block使用起来更加方便灵活
3.自动管理线程的生命周期(创建,调度,销毁),完全不需要我们手动管理,只告诉他任务就好
4.同时为多核并行处理器提供了解决方案,自动合理的利用CPU
什么是Queue队列?
GCD使用了队列的概念,管理线程执行任务,解决了NSThread难于管理的问题;
队列实际上就是数组的概念,通常都是吧要执行的任务添加到队列中
特点:
1.按照顺序执行,先进先出
2.队列可以管理多线程,管理并发执行的任务,可以设置主线程
3.GCD的队列是任务的队列,而不是线程的队列
什么是任务
1.任务即操作,你想要干什么,说白了就是一段代码,就是block里的东西
2.任务两种执行方式:
同步执行:当前无返回不往下走,只要不开线程,都在当前线程走
异步执行:并发的,只要是异步的,都会开启线程,在新的线程中执行
什么是串行队列
依次执行队列中的每一个任务
什么是并行队列
好像所有任务都是同一时间开始执行的
都有哪些队列
主队列,全局队列,自定义队列
GCD的任务队列有三种:
1.自定义队列
2.获取全局队列
3.获取主队列
异步:
任务在同一个队列里面是串行的
只要是异步,肯定开线程
全局队列特点:
1.可以同时执行多个任务,每个任务的启动时间是按照添加到queue的顺序执行的
2.全局队列能够实现并行,获取不同的全局队列,开启的线程不同,想要串行必须写在同一个block里面
3.我们不能自己手动创建,只能获取和调度
iOS中如何实现一个真正的单例(使用GCD)
1.首先要保证allocWithZone是线程安全的,当调用super方法的时候使用dispatch_once方法锁住
2.还要保证单例方法中也使用了dispatch_once方法锁住创建对象的过程
3.必须给一个全局的静态变量,要创建的单例类型
2.还要保证单例方法中也使用了dispatch_once方法锁住创建对象的过程
3.必须给一个全局的静态变量,要创建的单例类型
GCD方法获取主线程
dispatch_async(dispatch_get_main_queue(), ^{/*方法*/});
GCD队列可分为两大类:
并发队列:可以让多个任务并发(同时)执行,自动开启多个线程同时执行任务,并发功能只有在异步dispatch_async函数下才生效
串行队列:让任务一个接一个的执行(一个任务执行完毕后,再执行下一个任务)
同步异步主要影响:能不能开启新线程
同步:在新的线程中执行任务,不具备开启新线程的功能
异步:在新的线程中执行任务,具备开启新线程的功能
并发和串行主要影响:任务的执行方式
并发:多个任务同时执行
串行:一个任务执行完毕后,再执行另一个任务
异步并发队列:会同时创建多条线程
dispatch_queue_t queue = dispatch_global_queue(0,0);
dispatch_async(queue,^{
//code block;
});
异步串行队列:会创建新线程,一般只会开启一条线程
dispatch_queue_t queue = dispatch_queue_create(“queueName”,NULL);
dispatch_async(queue,^{
//code block;
});
同步并发队列:不会创建新的线程,(串行执行,一个任务执行完毕后再执行下一个任务)
dispatch_sync_t queue = dispatch_get_global_queue(0,0);
dispatch_sync(queue,^{
//code block;
});
同步串行队列:不会创建新的线程,(串行执行,一个任务执行完毕后再执行一下个任务)
dispatch_sync_t queue = dispatch_queue_create(“queueName”,NULL);
dispatch_sync(queue,^{
//code block;
});
0 0
- 关于GCD的一些介绍及相关使用
- 多线程GCD的使用及介绍
- GCD的基本使用及介绍
- GCD介绍及线程队列的使用
- IOS多线程相关:GCD及NSOperation的使用
- 关于GCD的一些用法
- 关于GCD的一些总结
- 关于GCD的一些认识
- 关于GCD的一些函数
- 关于iOS的GCD的介绍以及使用
- Spring mvc的介绍及一些相关注解介绍
- ctags的使用及相关参数介绍
- ctags的使用及相关参数介绍
- ctags的使用及相关参数介绍
- ctags的使用及相关参数介绍
- ComponentName的使用及相关介绍
- GCD的一些简单使用
- 关于AndroidStudio的使用的一些介绍
- 勿忘初心 按时睡觉 2016.03.02回顾
- Javascript 操作 DOM 常用 API 总结
- Linux写日志
- 如何判断一个整数位的二进制中有多少个1
- PCB 布线心得
- 关于GCD的一些介绍及相关使用
- C语言编码与字符转换
- GCD与NSOperationQueue的区别
- Git修改远程仓库地址
- Linux目录操作
- YTU 2427: C语言习题 整数排序
- 验证四方定理
- iOS学习之路-UIPickerView初认识与使用
- Boost库的编译安装