GCD 概要

什么是GCD

Grand Central Dispatch(GCD)是异步执行任务的技术之一。

为了使用多核CPU,特别是最近发布的iPhone、苹果在 OS X 10.6 和 iOS 4 引入了GCD。

通过GCD,不需要跟线程打交道,只需要将需要执行的任务追加到合适的Dispatch Queue中。GCD就能生成必要的线程并计划执行任务

为什么使用

易用性

GCD比thread更简单易用,基于Objective-C中的Block或者Swift中的闭包。闭包在Swift是第一等公民。使其在不同代码作用域之间传递上下文非常方便。

效率

系统级别实现的,比专门创建消耗资源的线程更加快速。

性能

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

GCD 队列

Dispatch Queue 是执行处理任务的队列。通过在Block或者闭包中写上想要执行的处理任务并追加到Dispatch Queue中。Dispatch Queue按照追加顺序(先进先出FIFO,First-In-First-Out)执行待处理的任务。

可以按照两种维度来分Dispatch Queue。一种是

  • Main Queue (主队列)
  • Global Queues (全局队列)
  • Custom Queues (自定义队列)

另外一种是

  • Concurrent Queues (并发队列)
  • Serial Queues (串行队列)

Main Queue

运行在主线程中的 main queue,是一个串行队列(Serial Queue),整个app中只有一个主队列。

Global Queues

全局队列一共有四种不同优先级的队列,并且都是并发队列(Concurrent Queues)

  • DISPATCH_QUEUE_PRIORITY_DEFAULT(默认)
  • DISPATCH_QUEUE_PRIORITY_HIGH (高)
  • DISPATCH_QUEUE_PRIORITY_LOW (低)
  • DISPATCH_QUEUE_PRIORITY_BACKGROUND (后台 用于I/O)

Custom Queues

自定义队列,可以创建两种队列。

  • 并发队列
  • 串行队列

实际上自定义队列都会加入到系统全局的队列中和线程池中。

Concurrent Queues

可以让多个任务并发执行,也就是同时执行(会自动根据系统负载情况开启多个线程同时执行任务)

Serial Queues

让任务连成一串一个接着一个执行。一个任务执行完毕才会执行下一个任务(这就可能导致死锁问题)

坚持原创技术分享,您的支持将鼓励我继续创作!