美文网首页
iOS多线程技术总结

iOS多线程技术总结

作者: 繁星mind | 来源:发表于2019-04-30 21:44 被阅读0次

多线程技术的优缺点

1.NSThread
优点:NSThread 比其他两个轻量级,是基于Pthreads封装的,更底层。

缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销

2.GCD
GCD是iOS4.0推出的,主要针对多核cpu做了优化,是C语言的技术,这套 API 引入了编程范式的变化,使从线程和线程函数的角度思考,变为从任务和队列的角度思考。
GCD 使用队列来派发任务(block),队列分为串行队列和并发队列,任务的派发方式分为同步派发和异步派发。GCD 自己维护了一个底层的线程库实现,以支持并发和异步的执行模型。使用 GCD 可以减轻开发者处理并发问题的负担,减少类似于死锁之类的潜在错误,而且能够自动地随着逻辑处理器的个数而扩展。
GCD是将任务(block)添加到队列(串行/并行/全局/主队列),并且以同步/异步的方式执行任务的函数,任务的取出遵循队列的FIFO原则:先进先出,后进后出

GCD执行三个维度 GCD队列和派发方式总结

GCD提供了一些NSOperation不具备的功能

  • 一次性执行:可以保证某一段代码在程序运行的过程中只被执行一次;一次性执行是线程安全的,在多线程环境下也是只执行一次;应用场景:设计单例模式

  • 延迟执行:既实现等待多长时间后在哪个队列中执行什么代码块

  • 调度组:监听一组异步任务执行结束之后,我们能够得到统一的通知;注意:在其调度组内的任务执行完毕后执行后面的”刷新主界面”方法与”玩完”之间的执行没有先后顺序;

3.NSOperation

NSOperation是iOS2.0推出的,iOS4.0之后重写了NSOperation

NSOperation将操作(异步的任务)添加到队列(并发队列),就会执行指定操作的方法

NSOperation里提供的方便的操作

  • 最大并发数,

  • 队列的暂定/继续

  • 取消队列中所有的操作

  • 指定操作之间的依赖关系(GCD可以用同步实现,但是比较麻烦)

对于Operation、GCD:
优点:不需要关心线程管理,数据同步的事情。

两者区别:NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。GCD主要与block结合使用。代码简洁高效

1.GCD的核心是C语言写的系统服务,执行和操作简单高效,因此NSOperation底层也通过GCD实现,换个说法就是NSOperation是对GCD更高层次的抽象,这是他们之间最本质的区别.因此如果希望自定义任务,建议使用NSOperation;

2.依赖关系,NSOperation可以设置两个NSOperation之间的依赖,第二个任务依赖于第一个任务完成执行,GCD无法设置依赖关系,不过可以通过dispatch_barrier_async来实现这种效果;

3.KVO(键值对观察),NSOperation和容易判断Operation当前的状态(是否执行,是否取消),对此GCD无法通过KVO进行判断;

4.优先级,NSOperation可以设置自身的优先级,但是优先级高的不一定先执行,GCD只能设置队列的优先级,无法在执行的block设置优先级;

5.效率,直接使用GCD效率确实会更高效,NSOperation会多一点开销,但是通过NSOperation可以获得依赖,优先级,继承,键值对观察这些优势,相对于多的那么一点开销确实很划算,鱼和熊掌不可得兼,取舍在于开发者自己;

6,GCD 只支持FIFO 的队列,而NSOperationQueue可以调整队列的执行顺序(通过调整权重)。NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。

区别总结:

  1. 性能:GCD更接近底层,而NSOperationQueue则更高级抽象,所以GCD在追求性能的底层操作来说,是速度最快的。这取决于使用Instruments进行代码性能分析,如有必要的话

  2. 从异步操作之间的事务性,顺序行,依赖关系。GCD需要自己写更多的代码来实现,而NSOperationQueue已经内建了这些支持

  3. 如果异步操作的过程需要更多的被交互和UI呈现出来,NSOperationQueue会是一个更好的选择。底层代码中,任务之间不太互相依赖,而需要更高的并发能力,GCD则更有优势。

多线程应用实例

  • YYDispatchQueuePool 通过 CPU 核心数来限制总的线程数量(实际上只是将数量限制在合理的范围内),提高 CPU 利用率的同时又尽量减少线程切换的开销。

  • SDWebImage 在子线程批量处理从磁盘读取图片的任务。在 I/O 操作频繁的情况下,通过多线程充分利用等待时间,同时防止了主线程的阻塞。

参考:
iOS中的多线程技术
iOS基础深入补完计划--多线程(面试题)汇总
iOS多线程NSThread,GCD ,NSOperation
iOS面试题11- NSThread/NSOperation/GCD的优缺点总结
多线程NSOperation 与 GCD的区别

相关文章

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • iOS 多线程技术最牛图解

    了解更多 iOS 多线程技术,点击阅读以下文章 iOS 多线程技术深度解析 最浅显易懂的iOS多线程技术 - GC...

  • 线程

    iOS 多线程:『GCD』详尽总结 NSThread详解 IOS 多线程编程 『NSOperation、NSOpe...

  • iOS多线程.md

    2018-05-22 iOS多线程-概念iOS多线程:『pthread、NSThread』详尽总结 多线程-概念图...

  • iOS多线程之NSThread

    前面总结了多线程基本概念和iOS多线程PThread的使用,下面接着总结iOS多线程的另外一种实现方案NSThre...

  • iOS NSOperation学习及总结

    这篇文章对iOS多线程技术NSOperation的常用方法做了简单总结GCD请见这篇本文代码 NSOperatio...

  • GCD

    转载 iOS多线程:『GCD』详尽总结

  • iOS多线程:『NSOperation、NSOperationQ

    iOS多线程:『NSOperation、NSOperationQueue』详尽总结

  • iOS 多线程技术总结

    概览 进程与线程的概念 多线程的由来 并行与并发 多线程的实现 串行与并行 线程的几种状态 串行队列与并发队列区别...

  • iOS多线程技术总结

    多线程技术的优缺点 1.NSThread优点:NSThread 比其他两个轻量级,是基于Pthreads封装的,更...

网友评论

      本文标题:iOS多线程技术总结

      本文链接:https://www.haomeiwen.com/subject/ymgsnqtx.html