首页 > 编程语言 > 详细

第一篇:GCD多线程的概念

时间:2015-10-03 14:21:20      阅读:233      评论:0      收藏:0      [点我收藏+]

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 D技术分享ISPATCH_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原则:先进先出,后进后出。

第一篇:GCD多线程的概念

原文:http://www.cnblogs.com/jinchengvs/p/4853320.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!