iOS:多线程

发布时间 2023-04-21 13:53:28作者: dulinshun

三个都是多线程相关的。

GCD 简单介绍
  1. iOS 和 osx 的核心内核是 XNU 内核,GCD 是基于 XNU 内核实现的
  2. GCD 的 API 全部的 libdispatch 中
  3. GCD 的底层实现主要是 Dispatch Queue 和 Dispatch Source
GCD 和 NSOperation 的区别
  1. GCD 是纯 C 语言的 API,NSOperation 是基于 GCD 的封装
  2. GCD 只支持 FIFO 队列,NSOperationQueue 可以很方便的调整队列顺序,设置最大并发数
  3. NSOperation 可以进行 KVO 监听线程是否正在执行,是否已经结束,是否已经取消等。
  4. NSOperation 可以跨队列设置依赖关系;GCD 只能设置串行队列,或者使用dispatch_barrier_async 进行控制执行顺序。
NSThread

优点:比较轻量级。
缺点:需要自己管理线程的生命周期,线程同步,加锁,睡眠以及唤醒等。线程同步对数据加锁会有一定的开销。

注意点

GCD 使用栅栏函数(dispatch_barrier_async)进行多线程异步操作时,不能使用全局的并发队列(dispatch_global_async),只能使用自己创建的并发队列(dispatch_queue_create)。