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