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 | var group = dispatch_group_create() |
结果:
4
5
2
9
8
0
3
1
6
7
finish
可以用NSBlockOperation
的addDependency(op: NSOperation)
方法实现相同的功能.
Dispatch barrier async
使用Dispatch barrier async
可以避免数据竞争的问题.
dispatch_sync
sync指同步,意味着函数等待block被处理完再返回.
注意:sync到当前线程会导致死锁.
dispatch_async
async指异步,函数立即返回