Farlanki.

GCD

字数统计: 337阅读时长: 1 min
2015/03/03 Share

Grand Central Dispatch

Grand Central Dispatch(GCDs)是异步执行任务的技术之一.它是基于C的API.只需要定义需要执行的任务并且追加到恰当的 Dispatch Queue中,GCD就能生成必要的线程并且执行任务.

Dispatch Queue

Dispatch Queue是执行处理的等待队列.Block被追加到Dispatch Queue中.Dispatch Queue 按照fifo的顺序对Block进行处理.Dispatch Queue分为两种:

  • Serial Dispatch Queue
  • Concurrent Dispatch Queue

Serial Dispatch Queue

Serial Dispatch Queue:线程池只提供一个线程用来执行任务,任务是串行的.

Concurrent Dispatch Queue

Concurrent Dispatch Queue:线程池有多个线程用来执行任务,任务之间是并行的.

Dispatch Group

对加入Dispatch Group的线程,使用Dispatch Group可以检测到处理执行的结束.例如可以把数个并行线程加入Dispatch Group,待其全部处理结束后,执行指定的任务.

1
2
3
4
5
6
7
8
9
10
11
12
var group = dispatch_group_create()
var queue = dispatch_queue_create("dispatch queue", DISPATCH_QUEUE_CONCURRENT)
for i in 0..<10
{
dispatch_group_async(group, queue, { () -> Void in
sleep(arc4random_uniform(3))
print(i)
})
}
dispatch_group_notify(group, queue) { () -> Void in
print("finish")
}

结果:
4
5
2
9
8
0
3
1
6
7
finish

可以用NSBlockOperationaddDependency(op: NSOperation)方法实现相同的功能.

Dispatch barrier async

使用Dispatch barrier async可以避免数据竞争的问题.

dispatch_sync

sync指同步,意味着函数等待block被处理完再返回.

注意:sync到当前线程会导致死锁.

dispatch_async

async指异步,函数立即返回

CATALOG
  1. 1. Grand Central Dispatch
    1. 1.1. Dispatch Queue
      1. 1.1.1. Serial Dispatch Queue
      2. 1.1.2. Concurrent Dispatch Queue
      3. 1.1.3. Dispatch Group
      4. 1.1.4. Dispatch barrier async
      5. 1.1.5. dispatch_sync
      6. 1.1.6. dispatch_async