iOS多线程之超实用理论demo演示

北京到哪里治疗白癜风 https://jbk.familydoctor.com.cn/bjbdfyy_js/

目录

背景简介GCD、OperationQueue对比核心理念区别GCD队列串行队列(SerialQueues)并发队列(ConcurrentQueues)串行、并发队列对比图注意事项block(块)相关dispatch_afterdispatch_semaphoredispatch_apply自问自答OperationQueue可以实现非FIFO效果队列暂停/继续取消操作取消单个操作对象取消队列中的所有操作对象自问自答常见问题如何解决资源竞争问题如何提高代码效率“西饼传说”确定操作对象的适当范围术语解释摘录本文demo地址参考文章下节预告

背景简介

在初学iOS相关知识过程中,大多都对多线程有些恐惧的心里,同时感觉工作中用上的概率不大。但是如果平时不多积累并学透多线程,当工作中真的需要用到的时候,就很可能简单百度后把一些知识点稀里糊涂地就用到工作中了,殊不知里面有很多的坑,也有很多技巧需要在理论上先做了解,再结合实战,进一步去体会多线程的魅力和强大。

接下来,就对多线程来源的背景进行简单的介绍:

在计算的早期,计算机可以执行的最大工作量是由CPU的时钟速度决定的。但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度。因此,芯片制造商寻找其他方法来提高芯片的总体性能。他们决定的解决方案是增加每个芯片上的处理器核心数量。通过增加内核的数量,一个单独的芯片可以每秒执行更多的指令,而不用增加CPU的速度或改变芯片的大小或热特性。唯一的问题是如何利用额外的内核。

应用程序使用多核的传统方法是创建多个线程。与依赖线程不同,iOS采用异步设计方法来解决并发问题。通常,这项工作涉及获取一个后台线程,在该线程上启动所需的任务,然后在任务完成时向调用方发送通知(通常通过一个回调函数)。

iOS提供了一些技术,允许您异步执行任何任务,而无需自己管理线程。异步启动任务的技术之一是GrandCentralDispatch(GCD)。这种技术采用线程管理代码,并将该代码移动到系统级别。您所要做的就是定义要执行的任务,并将它们添加到适当的分派队列中。GCD负责创建所需的线程,并安排任务在这些线程上运行。由于线程管理现在是系统的一部分,GCD提供了任务管理和执行的整体方法,比传统线程提供了更高的效率。

OperationQueue(操作队列,api类名为NSOperationQueue)是Objective-C对象,是对GCD的封装。其作用非常类似于分派队列。您定义要执行的任务,然后将它们添加到OperationQueue中,OperationQueue处理这些任务的调度和执行。与GCD一样,OperationQueue为您处理所有线程管理,确保在系统上尽可能快速有效地执行任务。

接下来,就对现在工作中常用的这两种技术进行比较和实例解析。

GCD、OperationQueue对比

核心理念

GCD的核心概念:将任务(block)添加到队列,并且指定执行任务的函数。NSOperation的核心概念:把操作(异步)添加到队列。区别

GCD:将任务(block)添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步)GCD是底层的C语言构成的APIiOS4.0推出的,针对多核处理器的并发技术在队列中执行的是由block构成的任务,这是一个轻量级的数据结构要停止已经加入queue的block需要写复杂的代码需要通过Barrier(dispatch_barrier_async)或者同步任务设置任务之间的依赖关系只能设置队列的优先级高级功能:dispatch_once_t(一次性执行,多线程安全);dispatch_after(延迟);dispatch_group(调度组);dispatch_semaphore(信号量);dispatch_apply(优化顺序不敏感大体量for循环);OperationQueue:OC框架,更加面向对象,是对GCD的封装。iOS2.0推出的,苹果推出GCD之后,对NSOperation的底层进行了全部重写。可以设置队列中每一个操作的QOS()队列的整体QOS操作相关Operation作为一个对象,为我们提供了更多的选择:任务依赖(addDependency),可以跨队列设置操作的依赖关系;在队列中的优先级(queuePriority)服务质量(qualityOfService,iOS8+);完成回调(void(^


转载请注明:http://www.aierlanlan.com/rzfs/5352.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了