Tag: 大中央派遣

中央中央调度(GCD)第一部分

众所周知,如果没有并发编程或多个CPU,愚蠢的计算机一次不能完成一项任务 点击此处获取示例应用 介绍 : 并发在编程语言中是一个巨大的话题,并且有点低级。 在本文中,我将讨论并行编程。 有很多用于并发的API.Apple发布了两个用于并发编程NSOperation和Dispatch Queue的低标签API。我将介绍Grand Canter Dispatch(GCD),并探讨我们为什么需要它以及如何使用Swift来实现它,并希望您能精通在这个API上..所以,让我们一起摇滚吧.. 那么为什么我们需要并发: 我们都知道计算机(单核)不能一次执行多任务。但是在计算中,多任务是必不可少的。因此,为了解决这个问题,发明了并发概念。并发是一次执行多任务的方式。 在高度上:考虑我们有一个应用程序,它一次有两个任务,一个是从网络下载数据,另一个是更新UI。两个任务都需要同时执行。如果下载(网络请求)需要一些时间,例如30此时用户界面将停止更新。并且应用程序将冻结甚至被压碎。从用户角度来看,它的作用各不相同。没有用户会再次使用此应用程序。 我们需要并发编程。 所以 在深入探讨并发之前,我们需要回顾一些定义,这将有助于我们进一步了解: 任务可以串行或同时执行两种方式 串行:任务可以一个接一个地执行。一个任务在其上一个任务完成时开始启动,例如FIFO(先入先出)。 我们可以举一个例子,例如电影院售票柜台。 如果有一个柜台,所有顾客都排队。 它是一个串行队列。当一位顾客购买票时,他将不在排队,下一位顾客将来取票。 它是一个串行队列。 并发: 并发只是一个概念,它可以同时运行多个任务,这可以在单核CPU或多核CPU中发生。在单核CPU中,它是通过时间分片来实现的。一个线程先执行上下文切换,然后再运行另一个线程线程或多核CPU通过并行执行多个线程。 并发是两种类型: 1,并发无并行 2并行并行 线程: 线程是进程的子单元,换句话说,线程是由操作系统调度程序独立调度的任务组。 Queue列: 队列是按先进先出(FIFO)的顺序管理对象的数据结构。在我们的示例电影票客户线上是队列。 为什么我们需要并发? 由于一些非常重要的原因,我们需要并发: 始终响应UI :在任何iOS应用程序首次启动时,默认情况下都会运行一个主队列。主队列可以更新用户界面。因此,我们需要使此队列仅用于UI和后台队列中的其他繁重任务。因此,此处进行并行编程需要解决这个问题。 利用iOS设备:如今,iOS设备是多核处理器,通过并发编程,我们可以并行使用多核处理器。 释放到主队列 大坎特派遣(GCD): 因此,我们已经为并行编程涵盖了足够的主题.Apple有两个用于并行编程的API.NSOperation和GCD。最常用的是GCD(Grand Canter Dispatch)。我们可以通过此API在iOS和MacOS上管理多线程。同步和异步任务队列。 GCD有调度队列,用于按FIFO顺序一个接一个地管理所有队列。GCD提供两种类型的队列,分别是串行队列和并发队列。这两个队列可以同步运行,也可以异步运行。我们将在一段时间后讨论。 串行队列: 串行队列可确保在任何给定时间仅运行一项任务。 GCD控制执行时间。 我们不知道任务何时开始并最终由调度队列管理。 在此图中,所有正在运行的任务都是按一个接一个的顺序执行的任务1比tast 2完成tn thn任务3启动等等… 并发队列: 并发队列一次运行多个任务。 所有任务都是按顺序添加的,但我们不知道什么时候全部完成或一次要执行多少任务都由系统管理。 如图所示,任务1开始并且这次没有任务在运行,但是任务1和任务2在同一时间启动,但是任务1在任务2之前完成了,所以并发队列我们不知道任务什么时候完成或如何完成我们将花费很多时间,我们只是知道任务将按照我们的订购方式运行。 它的依赖于调度到多个任务的队列将在不同的内核上运行或通过上下文切换发生。但是通常,如果内核可用而不是在内核上发生,则通常使用上下文切换。 GCD提供了三种主要的队列类型: […]