Tag: 中央调度

入门Swift编程第11部分-大型中央调度和关闭

以前,我们了解了代码结构,可读性和其他一些原理。 Swift编程入门第10部分-代码结构,可读性和原理 在上一篇文章中,我们介绍了基本协议,扩展和下标。 medium.com 是的,它不是技术性很强的工具,但是如果您一直在磨练自己的技能,那么您的项目就会变得相当庞大,并且您可能已经开始考虑可以使代码井井有条的方式。 项目之间的代码结构各不相同,因为在开始首次工作编程之前,开发人员很少谈论如何布局代码。 即使那样,它大部分时间还是安静的,只是希望您能赶上。 如果您尝试自己编写应用程序,则这样做的效果不太好。 当我们讨论了可读性时,我几乎不讨论任何事情,但是我为您提供了基础知识,因此当您回到代码中时,就不会迷失方向。 我可以只写一篇关于代码结构或可读性的整篇文章,但是为了使事情快速发展,我略过了。 如果您想了解有关结构或可读性的更多信息,请告诉我,本系列结束后,我将计划一些深入的文章。 最后,我们介绍了一些原则以为您提供指导,以及更多有关我为何以这种方式编写代码的上下文。 让我们开始吧。 Grand Central Dispatch是Apple处理称为调度队列的方法。 队列有三种类型: 串行 -按接收顺序执行发送到队列的工作,先入先出(FIFO)。 这些也称为专用调度队列。 并发 – 同时执行发送到队列的工作。 每个任务的启动顺序与将它们添加到队列的顺序相同。 串行队列和并发队列之间的主要区别在于,在串行队列中,下一个任务要等到第一个任务结束后才开始。在并发队列中,下一个任务可能不需要与第一个任务一样多的时间来完成,并且可能在第一个任务之前完成第一个任务完成。 在决定使用哪个队列时,请记住这一点。 这些也称为全局调度队列。 主调度队列 -这是应用程序的主线程,或应用程序所在的位置。 当您将代码放入View Controller的viewDidLoad()时,这就是所有工作的队列。 我将暂时脱离所有这些,以使您了解这些队列与硬件的关系。 在这里,我提供了排队时任务的快照。 在继续之前,我想先介绍几个定义。 运行循环-您的程序只有在告诉您时才停止,而在运行时,它会在while循环下运行,直到结束。 有时它需要处理事物,而其他时候,它只是简单地通过循环而没有任何变化。 线程-简单地说,这些是您的单独任务,如果您的任务需要另一个任务来完成其自己的过程,它将在另一个线程中处理该任务。 (不要与CPU Core混淆) CPU —计算机的大脑,这是使用一个或多个内核执行计算的设备。 核心-核心是处理器的物理或逻辑部分,可读取您的代码并返回结果。 每个核心都有许多硬件线程,可用于执行在其上发送的任务。 CPU Clock Speed(CPU时钟速度)—处理器读取1s和0s(二进制)的速度。 如果您曾经想过1 GHz意味着什么,Giga意味着十亿,那么1 GHz意味着处理器的每个内核每秒可以读取10亿个1或0。 我的开发计算机的处理器速度为2.8 GHz,具有8个内核。 这意味着它可以在其基本时钟速度下每秒处理2.8 * 8 = […]

iOS iOS中的多线程入门

随着我们所有移动设备中多核处理芯片的出现,它带来了在应用程序中同时执行多个任务的可能性。 在iOS中, 为了使应用程序的UI保持响应状态,所有繁重的任务都添加到了新线程中,例如,网络调用。 这些线程通常在后台运行,并在必要时发送回叫以更新UI。 苹果文档中已完美说明了多线程需求,它说: OS X或iOS中的每个进程(应用程序)都由一个或多个线程组成,每个线程代表通过应用程序代码执行的单个路径。 每个应用程序都从一个线程开始,该线程运行该应用程序的主要功能。 应用程序可以产生其他线程,每个线程都执行特定功能的代码。 为了方便和安全地管理这些额外的线程,我们需要一个框架,例如dispatch multi 实现多线程的方法: –大中央派遣 – NSThread – NSOperationQueue 本博客假定您对这些类型有基本的了解。 比较这些方法时: Code/Structural Origins: GCD是基于C的底层API。 NSOperation和NSOperationQueue是Objective-C类(GCD上的包装器)。 NSThread是一个NSObject(使用pthreads)。 Complexity comparison: 对于GCD实施非常轻巧 NSOperationQueue非常复杂且重量级 NSThread只是pthread的包装器,因此也使其轻巧。 NSOperation advantages over GCD and NSThread: 您可以: 因此,在两个NSOperation之间建立依赖关系,使开发人员可以按特定顺序执行任务。 一旦任务开始执行,就暂停,取消,恢复NSOperation,因此可以控制该操作的生命周期。 监视操作的状态,例如:准备,执行或完成。 指定可以同时运行的最大排队操作数。 显然,NSOperationQueue为您提供了对操作的更多控制。 一旦确定了要使用的方法,就需要确定其顺序和优先级。 Order of Operation: 队列可以有两种类型:串行队列或并发队列,分别分别同步和异步运行任务 Priority of operations: 优先级定义为称为QoS的服务质量,分为以下四种类型: 现在,我们通过预测几个示例的输出来尝试了解这些操作。 在尝试回答下面的代码输出之前,让我们看一下dispatch_async和dispatch_sync的文档: Dispatch_async: 🤞🏼声明void dispatch_async(dispatch_queue_t队列,dispatch_block_t块)👥讨论此函数是用于将块提交到调度队列的基本机制。 […]