Swift多线程开发 - 1.概述

1. 术语

同步和异步

在同步队列里的任务,下一个任务会在当前任务 执行完成之后 再执行。

在异步队列里的任务,下一个任务会在当前任务 开始之后 就执行。

同步任务会阻塞当前的Run Loop,而异步的不会。

串行和并发队列

队列本身相当于是一个任务管理列表,里面管理着不同的任务
任务提交到的队列还具有串行或并发的特征。

串行队列 只有一个 与之关联的线程,因此仅允许在任何给定时间执行单个任务。
并发队列能够利用 系统拥有资源的线程数 , 将根据需要在并发队列上创建和释放线程。

注意 ⚠️:并发队列不能保证一次运行多个任务。 如果程序当前资源紧张,也可能只能执行一项任务

小结

同步和异步的却别在于是否会等待当前任务完成再开始下一个任务

串行和并发的区别在于是否有多少线程可供调用

2. Grand Central Dispatch

GCD(Grand Central Dispatch)是Apple对C的libdispatch库的实现。它用先进先出(FIFO)队列来管理用户任务,然后分配到对应的完全由系统管理的线程上。

具体的任务分配到哪个线程上是无法确定的(除了特殊的主线程任务)

3. Operation

如果任务之用运行一次那么GCD非常会合适,但如果有可以重用的任务需要封装,或者需要对任务状态追踪更改,取消任务,那么Operation会更加得心应手。

通过写一个继承于Operation的子类,来封装。

Operation主要的特点是有不同的任务状态

  • isReady // 准备就绪
  • isExecuting // 正在执行
  • isCancelled // 被取消
  • isFinished // 已完成

Operation不像GCD,它默认是同步的,

Block Operation

如果想要方便的像GCD调用闭包一样使用Operation。
BlockOperation也是Operation的子类,在默认在异步在全局队列中执行。如果需要同步运行的话,需要设置队列。

4. 该用哪一个?

如果只是执行简单任务的话,GCD显然更方便快捷。
但是需要有跟踪任务状态,并且取消任务的话,Operation则会提供

GCD Operation
推出时间 iOS 4.0 iOS 2.0(4.0之后重构)
任务方式 闭包 子类、闭包
取消 复杂 简单
依赖关系 复杂 简单

5. 习题

向一个异步串行队列加入三个任务和一个异步并发队列加入三个任务结果有什么区别?



作者个人博客

系列文章链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 3,777评论 0 0
  • 现在iOS的多线程方案主要有以下这几种: GCD(Grand Central Dispatch):使用dispat...
    寒光冷剑阅读 5,701评论 0 2
  • 主队列 细心的同学就会发现,每套多线程方案都会有一个主线程(当然啦,说的是iOS中,像 pthread 这种多系统...
    京北磊哥阅读 2,934评论 0 1
  • 学习多线程,转载两篇大神的帖子,留着以后回顾!第一篇:关于iOS多线程,你看我就够了 第二篇:GCD使用经验与技巧...
    John_LS阅读 3,833评论 0 3
  • iOS开发中常用的几种多线程方案,简单做个小结,方便日后查阅。 Pthreads NSThead GCD NSOp...
    acqiang阅读 3,150评论 0 4

友情链接更多精彩内容