1.什么叫GCD?
简单来说就是:Grand Central Dispatch的简称,中文翻译就是:”牛逼的中枢调度器“
这是纯C语言,还提供了非常多强大的函数
2.GCD的相对优势:
(1)GCD是苹果公司为多核的并行运算提出的解决方案
(2)GCD会自动利用更多的cpu内核(比如:双核 等等)
(3)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
3.注意:
(1)GCD存在于libdispatch.dylib这个库中,这个调度库包含了GCD的所有的东西,但任何IOS程序,都默认加载在这个库中,在程序运行过程中会动态的加载,不需要我们手动导入。
(2)GCD是纯C语言的,因此我们在编写GCD相关代码的时候,面对的函数,而不是方法。
(3)GCD中的函数大多数以dispatch开头。
4.GCD的任务和队列
GCD中有两个核心概念:
(1)任务:执行什么操作
(2)队列:用来存放任务
GCD的使用有两个步骤:
(1)定制任务
(2)确定想做的事情
5.要执行的任务
(1)GCD中有两个用来执行任务的函数
注意:把右边的参数(任务)提交给左边的参数(队列)进行执行
<1>如果用同步的方式的话就用:dispatch_sync(dispatch_queue,dispatch_block_t block);
说明:queue:队列
block:任务
<2>如果用异步方法执行任务的话就用:dispatch_asynch_(dispatch_queue_tqueue,dispatch_block_t block);
重点:同步和异步的区别:
同步:在当前线程中执行
异步:在另一条线程中执行
6.队列
GCD队列分为两大类型:
(1)并发队列:可以让多个任务同时执行(自动开启多个线程同时执行任务)并发功能只有在异步的dispatch_async函数下才有效
(2)串行队列:让任务一个接一个这样执行(一个任务执行完毕后,在执行下一个任务)
7.并发队列:
GCD默认已经提供了全局的并发队列,供应使用,不需要手动创建。
使用dispatch_get_global_queue函数获得全局的并发队列;
示例:
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags)这个参数留给以后用的所以我们传个0。
第一个参数为优先级,在这里是默认的。获取一个全局的默认优先级的并发队列。
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAUI,0)这样就可以获取全局并发队列了
说明:全局并发队列的优先级
#define DISPATCH_QUEUE_PRIORITY_HIGH 2//高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT//默认(中)
#define DISPATCH_QUEUE_PRIORITY_LOW//低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN//后天
8.串行队列
10.说明:
同步、异步、并发、串行这四个术语是比较混淆的,所以好好注意哦!
同步和异步决定了是否开启多一条线程:
同步:在当前线程执行任务,不具备开启新线程的能力
异步:在新的线程执行任务,就具备了开启新线程的能力
并发和串行决定了任务的执行方式:
并发:多个任务执行同时进行
串行:一个执行完毕后再接着一个执行
提示:将任务添加到队列中,GCD会自动将队列中的任务取出来,放到对应的线程中并执行。当任务取出后遵循的队列FIFO原则:先进先出,后进后出。
原文:http://www.cnblogs.com/jinchengvs/p/4853320.html