iOS开发—使用GCD实现多线程

GCD是苹果公司为多核的并行运算提出的解决方案,工作时会自动利用更多的处理器核心。使用GCD,系统会完全管理线程,开发者无需编写线程代码。

GCD是Grand Central Dispatch 的缩写,它是基于C语言的。GCD会负责创建线程和调度学要执行的任务,由系统直接提供线程管理。GCD有两个核心概念:队列和任务。

1、队列

Dispatch Queue(队列),它是一个用来存放任务的集合,负责管理开发者提交的任务。队列的核心理念就是将长期运行的任务拆分成多个工作单元,并将这些单元添加到队列中,系统会代为管理这些队列,并放到多个线程上执行,无需开发者直接启动和管理后台线程。

系统提供了许多预定义的队列,包括可以保证始终在主线程上写执行工作的Dispatch Queue,也可以创建自定义的Dispatch Queue,而且可以创建任意多个。队列会维护和使用一个线程池来处理用户提交的任务,线程池的作用就是执行队列管理的任务。GCD的Dispatch Queue严格遵循FIFO(先进先出)原则,添加到Dispatch Queue的工作单元将始终按照加入Dispatch Queue的顺序启动。

需要注意的是:由于每个任务的执行时间各不相同,先处理的任务不一定先结束。

根据任务执行方式不同,队列主要分两种:

(1)Serial Dispatch Queue(串行队列)

串行队列底层的线程池只有一个线程,一次只能执行一个任务,前一个任务执行完成之后,才能够执行下一个任务。

(2)Concurrent Dispatch Queue(并发队列)

并行队列底层的线程池提供了多个线程,可以按照FIFO的顺序并发启动、执行多个任务,这样可以使应用程序的响应性能显著提高。

2、任务

任务就是用户提交给队列的工作单元,也就是代码块,这些任务会交给维护队列的线程池执行,因此这些任务会以多线程的方式执行。

综上,如果要使用GCD实现多线程,仅仅需要两个步骤:

(1)创建队列;

(2)将任务的代码块提交给队列。

创建队列

创建队列需要获取一个dispatch_queue_t类型的对象,iOS提供了多个创建或者访问队列的函数,大体分为3种情况:

1、获取全局并发队列(Global Concurrent Dispatch Queue)

全局并发队列可以同时并行的执行多个任务,但并发队列仍然按照先进先出的顺序来启动任务。并发队列会在前一个任务完成之前就启动下一个任务并开始执行,它同时执行的任务数量会根据应用和系统的动态变化,主要影响因素包括可用核数量、其他进程正在执行的工作数量、其他串行队列中优先任务的数量等。

系统会给每个应用提供多个并发的队列,整个应用内全局共享。开发者不需要显式地创建这些队列,只需要使用dispatch_get_global_queue()函数来获取这些队列,函数定义如下:

dispatch_queue_t dispatch_get_global_queue(long identifier,unsigned long flags);
该函数有两个参数,第2个参数是供以后使用的,传入0即可。第1个参数用于指定队列的优先级,包含4个宏定义的常量,定义格式如下:

#define DISPATCH_QUEUE_PRIORITY_HIGH 2              //高
#define DISPATCH
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值