GCD开发笔记(一):CGD基本介绍
来源:互联网 发布:php server addr 编辑:程序博客网 时间:2024/05/03 18:36
什么是GCD?
GCD(Grand Central Dispatch)是一套低层API,提供了一种新的方法来进行并发程序编写。允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。
GCD的API很大程度上基于block,当然,GCD也可以脱离block来使用,比如使用传统c机制提供函数指针和上下文指针。实践证明,当配合block使用时,GCD非常简单易用且能发挥其最大能力。
GCD相比传统多线程编程的优势:
- 从使用来看: GCD比之thread跟简单易用。由于GCD基于work unit而非像thread那样基于运算,所以GCD可以控制诸如等待任务结束、监视文件描述符、周期执行代码以及工作挂起等任务。基于block的血统导致它能极为简单得在不同代码作用域之间传递上下文。
- 从效率看: GCD被实现得如此轻量和优雅,使得它在很多地方比之专门创建消耗资源的线程更实用且快速。这关系到易用性:导致GCD易用的原因有一部分在于你可以不用担心太多的效率问题而仅仅使用它就行了。
- 从性能上来看: GCD自动根据系统负载来增减线程数量,这就减少了上下文切换以及增加了计算效率。
注:尽管GCD是纯C语言,但它被组建成面向对象的风格,被称为dispatch object。它像cocoa对象一样是引用计数的。使用dispatch_release和dispatch_retain函数来操作dispatch object的引用计数来进行内存管理。如果你使用了ARC,但由于它不是OC对象,所以并不参与垃圾回收,所以即使你使用了ARC,也记得一定要对内存进行手动管理。
GCD的基本概念就是dispatch queue。dispatch queue是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。
GCD中有三种队列类型:
- main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个串行队列。
- Global queues: 全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函数传入优先级来访问队列。
- 用户创建队列: 用函数
dispatch_queue_create
创建的队列. 这些队列是串行的,正因为如此,它们可以用来完成同步机制, 有点像传统线程中的mutex。
- GCD开发笔记(一):CGD基本介绍
- MySQL学习笔记(一)基本介绍
- HTTP笔记(一)基本介绍
- GCD学习笔记(一)
- iOS开发CGD
- iOS开发CGD买票
- GCD的介绍和使用(一)
- GCD入门介绍一
- iOS学习笔记10(1)—GCD介绍(一): 基本概念和Dispatch Queue
- [笔记]iOS开发之多线程GCD和NSOperation基本使用
- iOS开发之多线程(GCD介绍)
- Deep Learning学习笔记(一)——基本介绍
- 利用cocos2dx 3.2开发消灭星星(一)基本介绍
- cocos2dx3.2开发 RPG《Flighting》(一)基本介绍
- Office 365 开发与实践 (一) 基本服务介绍
- GCD开发笔记(二):GCD的使用
- iOS GCD 学习笔记(一)
- android开发学习笔记(2)android的基本介绍
- java reference and GC
- Data Guard Wait Events
- 红帽集群套件RHCS四部曲(概念篇)
- SAP PI7.3 新特性
- JS函数集合大全
- GCD开发笔记(一):CGD基本介绍
- 1061. Dating (20)
- 堆排序 (Heapsort)
- 当用ImageView或者RelativeLayout等设置OnTouch事件总结到的问题
- Qt获取系统相关位置
- VS常见错误处理:error C1189
- Linux fuser工具使用方法介绍
- mysql定时执行-mysql event事件
- DIV+CSS设计时浏览器兼容性问题