# 05.iOS多线程技术对比

## 一: NSThread

> 每个NSThread对象对应一个线程，真正最原始的线程

* 优点
  * NSThread 轻量级最低，相对简单。
* 缺点
  * 手动管理所有的线程活动，如生命周期、线程同步、睡眠等。

## 二: NSOperation

> 自带线程管理的抽象类。 基于GCD

* 优点
  * 自带线程周期管理，操作上可更注重自己逻辑。
  * 提供了一些在GCD中不容易实现的特性，如：限制最大并发数量、操作之间的依赖关系
* 缺点
  * 面向对象的抽象类，只能实现它或者使用它定义好的两个子类：NSInvocationOperation 和 NSBlockOperation。

## 三: GCD

> Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。

* 优点
  * 最高效，避开并发陷阱。
  * 用Block定义任务，使用起来非常灵活便捷
  * 通过GCD，开发者不用再直接跟线程打交道，只需要向队列中添加代码块即可
  * GCD在后端管理着一个线程池，GCD不仅决定着代码块将在哪个线程被执行，它还根据可用的系统资源对这些线程进行管理。从而让开发者从线程管理的工作中解放出来，通过集中的管理线程，缓解大量线程被创建的问题
  * 使用GCD，开发者可以将工作考虑为一个队列，而不是一堆线程，这种并行的抽象模型更容易掌握和使用
* 缺点
  * 基于C实现。

## 四: 场景

Operation queue 提供了更多你在编写多线程程序时需要的功能，并隐藏了许多线程调度，线程取消与线程优先级的复杂代码，为我们提供简单的API入口。从编程原则来说，一般我们需要尽可能的使用高等级、封装完美的API，在必须时才使用底层API。但是我认为当我们的需求能够以更简单的底层代码完成的时候，简洁的GCD或许是个更好的选择，而Operation queue 为我们提供能更多的选择。

## 参考

> <http://yoferzhang.com/post/20160830ConcurrencyProgrammingGuide/> <https://www.jianshu.com/p/d09e2638eb27>
