Swift 3:使用Grand Central Dispatch实现多线程

自从Swift 3.0开源以来,它是Swift的第一个主要版本,自Swift 3.0到来以来,开发人员正在迅速赶上对核心语言和标准库的所有主要改进和改进。 大的欢迎变化之一是大中央调度 (GCD) 。 在性能,并发性,并行化和线程化方面,GCD是所有Apple平台上最常用的技术之一。

我们使用GCD解决的最常见的问题是在后台线程上运行任务的能力,以便不阻塞在主线程中运行的UI。 应用程序开发中的常见任务是从服务器下载图像,此任务可能需要x倍的时间才能完成,因此,如果您在主线程中运行此任务,则会阻止UI,并且用户将无法再操作该应用程序。 造成不愉快的用户体验,并可能使应用程序崩溃。 我们通过将任务分配给后台线程来解决GCD问题。 GCD通过将任务分配给主线程以外的其他线程或队列来利用CPU的多任务处理功能。

除了GCD,Apple还提供了NSOperationQueue框架来编写并发代码。 两者都旨在封装工作单元并分派它们以执行。 了解每个提供的好处将帮助您决定实施哪个。 在这篇文章中,我将主要关注GCD。

查看这个出色的博客,它解释了GCD和NSOperation的区别和好处。

在NSOperation和中央中央调度之间进行选择– Cocoacasts
自iOS 2起NSOperation和NSOperationQueue自iOS 2可用以来,Grand Central Dispatch(简称GCD)是…… cocoacasts.com

Swift 3对GCD的更改使开发人员更容易,尤其是像我这样的新开发人员更容易回忆起代码并在项目中应用。 在Swift 3发布GCD语法之前,编码风格非常接近底层C,并且与Swift中的任何其他编码风格都明显不同。 新的GCD API主要围绕DispatchQueue旋转。 此类允许创建和修改队列, 同步异步调度代码等等。

AD ispatchQueue可以是serial ,因此可以一次执行一个工作项,也可以是并发的 ,以使工作项按顺序出队,但可以一次全部运行并且可以按任何顺序完成。 串行队列和并发队列均以先进先出(FIFO)顺序处理工作项。

同步本质上是指“有序”。基本上,当您执行同步操作时,以后出现的所有内容都必须等待操作完成才能开始。

异步或多或少意味着“不按顺序进行”。当您异步执行某项操作时,以下代码可以立即运行,并且异步操作将……运行。 它可能与其他代码在另一个线程上并行运行。 可能只是在同一线程上安排了其他时间。

GCD分派使在后台线程上执行异步操作异常容易。 让我们从我当前正在使用的电影应用程序中查看下面的代码块。 首先,我对OMDB(电影数据库)服务器进行了API调用,如果请求成功,我将解析JSON并更新DispatchQueue.main.async {…}块内的UI。 DispatchQueue块内的任何代码,例如上传电影海报图像,都将在单独的线程上运行,并在完成后更新UI。 在运行此任务时,用户仍然可以不受阻碍地操作应用程序。