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
Last updated