iOS:多线程
三个都是多线程相关的。
GCD 简单介绍
- iOS 和 osx 的核心内核是 XNU 内核,GCD 是基于 XNU 内核实现的
- GCD 的 API 全部的 libdispatch 中
- GCD 的底层实现主要是 Dispatch Queue 和 Dispatch Source
GCD 和 NSOperation 的区别
- GCD 是纯 C 语言的 API,NSOperation 是基于 GCD 的封装
- GCD 只支持 FIFO 队列,NSOperationQueue 可以很方便的调整队列顺序,设置最大并发数
- NSOperation 可以进行 KVO 监听线程是否正在执行,是否已经结束,是否已经取消等。
- NSOperation 可以跨队列设置依赖关系;GCD 只能设置串行队列,或者使用dispatch_barrier_async 进行控制执行顺序。
NSThread
优点:比较轻量级。
缺点:需要自己管理线程的生命周期,线程同步,加锁,睡眠以及唤醒等。线程同步对数据加锁会有一定的开销。
注意点
GCD 使用栅栏函数(dispatch_barrier_async)进行多线程异步操作时,不能使用全局的并发队列(dispatch_global_async),只能使用自己创建的并发队列(dispatch_queue_create)。