iOS 多线程之方案对比

581 阅读2分钟

前序:按顺序阅读更好

概念篇-进程与线程,任务和队列

iOS 多线程之GCD

iOS 多线程之 NSOperation

iOS 多线程之方案对比

一 多线程的选择方案

技术方案简介语言线程生命周期使用频率
pthread一套通用的多线程API,适用于Unix/Linux/Windows等系统,跨平台/可移植,使用难度大C程序员管理几乎不用
NSThread使用更加面向对象,简单易用,可直接操作线程对象OC程序员管理偶尔使用
GCD旨在替代NSThread等线程技术充分利用设备的多核C自动管理经常使用
NSOperation基于GCD(底层是GCD),比GCD多了一些更简单实用的功能,使用更加面向对象OC自动管理经常使用

二 GCD和NSOperation的比较

  • GCD和NSOperation的关系如下:

    • GCD是面向底层的C语言的API
    • NSOperation是用GCD封装构建的,是GCD的高级抽象
  • GCD和NSOperation的对比如下:

    1. GCD执行效率更高,而且由于队列中执行的是由block构成的任务,这是一个轻量级的数据结构——写起来更加方便
    2. GCD只支持FIFO的队列,而NSOpration可以设置最大并发数、设置优先级、添加依赖关系等调整执行顺序
    3. NSOpration甚至可以跨队列设置依赖关系,但是GCD只能通过设置串行队列,或者在队列内添加barrier任务才能控制执行顺序,较为复杂
    4. NSOperation支持KVO(面向对象)可以检测operation是否正在执行、是否结束、是否取消

实际项目中,很多时候只会用到异步操作,不会有特别复杂的线程关系管理,所以苹果推崇的是优化完善、运行快速的GCD

如果考虑异步操作之间的事务性、顺序性、依赖关系,比如多线程并发下载,GCD需要写更多的代码来实现,而NSOperation已经内建了这些支持

不管是GCD还是NSOperation,系统对于线程的创建、调度管理和释放都做得很好,不需要我们操心;而NSThread需要我们自己去管理线程的生命周期,还要考虑线程同步、加锁问题,造成一些性能上的开销