GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
2015-07-31 16:01
225 查看
队列负责调度任务执行所在的线程以及具体的执行时间
队列的特点是先进先出,新添加至队列的操作(任务)都会排在队尾
GCD的函数都是以dispatch开头的,dispatch的意思是“分配、调度”
串行队列中的任务会按顺序执行
并行队列中的任务通常会并发执行,而且无法确定任务的执行顺序
dispatch_async表示异步操作,异步操作会新开辟线程来执行任务,而且无法确定任务的执行顺序
dispatch_sync表示同步操作,同步操作不会新开辟线程
在串行队列中执行同步任务:不会新建线程,按顺序执行任务(毫无用处)
在串行队列中执行异步任务,会新建线程,按顺序执行任务(非常有用)
在并行队列中执行同步任务:不会新建线程,按顺序执行任务(几乎没用)
在并行队列中执行异步任务:会新建多个线程,但是无法确定任务的执行顺序(有用,但是很容易出错)
全局队列:
全局队列是系统的,直接拿过来就可以用,与并行队列类似,但是不能指定队列的名字,调试时无法确认任务所在队列
在全局队列中执行同步任务:不会新建线程,按顺序执行任务
在全局队列中执行异步任务:会新建多个线程,但是无法确定任务的执行顺序
主队列:
每一个应用程序只有一个主线程即只有一个主队列
为什么需要再主线程上执行任务呢?因为在ios开发中,所有UI的更新任务都必须在主线程上执行。
主队列中的操作都是在主线程中执行的,不存在异步的概念
主队列中添加的同步操作永远不会被执行(会死锁)
小结:
无论什么队列和什么任务,线程的创建和回收不需要程序员参与,由队列来负责,程序员只需要面对队列和任务。
GCD在后端管理这一个线程池,GCD不仅决定着Block代码块将在哪个线程中被执行,
而且还可以根据可用的系统资源对这些线程进行管理,从而让开发者从线程管理的工作中解放出来,
通过GCD这种集中的管理线程,缓解了大量的线程被创建的问题。
相关文章推荐
- session_jsp应用原理
- Android 4.3 BLE蓝牙(自用)
- LeetCode:Minimum Depth of Binary Tree&& Maximum Depth of Binary Tree
- qtcreator 交叉编译 配置
- 跟我上“云”端(三)eclipselink+jboss实现多租户基本配置
- C语言实现Luhn 校验
- 串口通信校验方式(even,odd,space,mark)
- Android,java开发性能优化大总结
- HDU 5334 Virtual Participation(2015多校第四场)
- 高三dom笔记
- 短信通信的几种情况和CMS错误
- 串口通信校验方式(even,odd,space,mark) 分类: 开发工具 2015-07-31 16:01 5人阅读 评论(0) 收藏
- [Object-c]cocoaPods 安装及遇到问题处理方法
- 关于网页与firefox不兼容的问题
- 一张表更新另一张表 单行返回多行
- iOS开发之:iOS单个ViewController支持横屏,其他全竖屏方法
- 兴趣和专业
- Java编程思想重点笔记(Java开发必看)
- android actionbar的简单使用
- AJAX向服务器发送请求并返回json数据