iOS-多线程编程学习之GCD——串行队列和并发队列(五)

  Grand Central Dispatch(GCD)有很多部分构成,例如有很好的语言特性,运行库,还提供了系统的、高效的方式来支持具有多核处理器的iOS和OS X设备进行并发事件处理。
  BSD子系统,CoreFoundation和Cocoa APIs都已经使用这个增强特性来进行扩展了,因为它可以使得你的系统和应用运行的更快,更有效率,响应更及时。GCD是运行在系统级别的,他可以更好的满足应用运行时的需求,更合理调度有限的系统资源。
  GCD并不是被限制只能在系统级别应用上使用的,我们可以在更高层的应用上也使用它。但是一般情况下我们还可以考虑Cocoa中是否有类似的对象可以实现相似的功能,例如NSOperation,它也提供了很简单便捷的方式来进行并发任务处理【传送门——iOS-多线程编程学习之NSOperation(四)】。

一、GCD与ARC

  当使用Objective-C来构建应用时,所有的dispatch obeject都是Objective-C类型的对象。所以当在应用中开启了ARC(自动引用计数)时,这些dispatch obeject也会想OC的对象一样被自动的发送retainrelease消息。当ARC被禁用时(也就是进行MRC手动内存管理时),可以通过使用dispatch_retaindispatch_release来实现类似OC对象的retain和release操作。

二、创建任务队列

GCD中的队列主要分两种。

  • 并发队列:允许多个任务同时执行。
  • 串行队列:任务按顺序依次执行。

  系统默认有一个和主线程绑定的串行队列,还有一个全局的并发队列。这两个队列都可以通过响应的方法来获得。

2.1 获得主线程的串行队列

调用这个方法获取主线程队列时,该队列是由主线程来自动创建的。

    dispatch_queue_t mainQueue = dispatch_get_main_queue();

2.2 获得全局的并发队列

  获取全局并发队列的方法中有两个参数,第二个参数暂时没有使用,默认传值0就好。第一个参数表示队列的优先级,其中优先级主要分为4种。

  • DISPATCH_QUEUE_PRIORITY_HIGH 2,优先级高
  • DISPATCH_QUEUE_PRIORITY_DEFAULT 0,默认优先级,中
  • DISPATCH_QUEUE_PRIORITY_LOW -2,优先级低
  • DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN,后台模式,优先级最低
        dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

2.3 创建自定义的队列

  创建自定义的队列主要有两种,一种是串行队列,一种是并行队列。在创建自定义队列时会需要传两个参数,第一个为队列的名称,第二个为表示队列类型的常量(串行还是并行)。

DISPATCH_QUEUE_SERIAL //串行队列
DISPATCH_QUEUE_CONCURRENT //并行队列

代码也很简单。

    //串行队列
    dispatch_queue_t serialQueue = dispatch_queue_create("com.lysongzi.serial", DISPATCH_QUEUE_SERIAL);

    //并行队列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("com.lysongzi.concurrent", DISPATCH_QUEUE_CONCURRENT);

三、同步和异步

  当我们创建了队列之后,我们需要把任务添加到队列中,并指定以同步还是异步的方式执行添加到队列中的任务。
  同步,其会在当前线程立即执行添加的任务(无论是串行还是并行队列都如此)。
  异步,其会新创建一个新的线程来执行任务。而异步对于串行和并行队列的又不一样的意义的。
  对于异步执行的串行队列的话,新添加的多个任务会在新创建的线程中依次执行,即一个执行完在执行另一个任务,有点类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值