天天看点

GCD入门介绍一

什么是GCD?

Grand Central Dispatch是一套底层API,提供一种新的方法进行并行程序编写。GCD跟NSOperationQueue比较像,它允许程序将任务切分为多个单一任务然后提交到工作队列中并发地或者串行地执行。GCD比NSOpertaionQueue更底层更高效,并且它不是Cocoa框架的一部分。

GCD的API很大程度上基于block,当然,GCD也可以脱离block来使用,比如使用系统c机制提供函数指针和上下文指针。GCD一般与block配合使用时,能发挥其最大能力。

GCD的优势

1.易用:GCD比NSThread简单易用。由于GCD基于work unit而非像thread那样基于运算,所以GCD可以控制诸如等待任务结束、监视文件描述符、周期执行代码以及工作挂起等任务。基于block的GCD,让它能极为简单得在不同代码作用域之间传递上下文。

2.效率:GCD被实现得如此轻量和优雅,使得它在很多地方比之专门创建消耗资源的线程更实用且快速。

3.性能:GCD自动根据系统负载来增减线程数量,减少了上下文切换以及增加了计算效率。

Dispatch Objects

GCD是纯C语言的,它被组建成面向对象的风格。GCD对象被称为Dispatch object。Dispatch object像Cocoa对象一样是引用计数的。使用dispatch_release和dispatch_retain函数来操作dispatch object的引用计数来进行内存管理。

Dispatch Queues

GCD的基本概念就是dispatch queue。dispatch queue是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或者串行的,并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。

GCD中三种队列类型:

1.Main queue:与主线程功能相同。实际上,提交到main queue的任务会在主线程中执行。main queue可以调用dispatch_get_main_queue()来获得。

2.Global queues:全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先队列。通过dispatch_get_global_queue函数传入优先级来访问队列。

3.用户队列:dispatch_queue_create创建队列。

继续阅读