1、毕业论文题 目:iOS 平台下并发编程的研究和实现姓 名: 学 号:指导教师(职称): 专 业: 班 级:所 在 学 院: 2015 年 6 月武汉工程大学 毕业论文- I-目 录摘 要 IIIAbstract . V第一章 绪 论 11.1 移动开发中的并发编程 . 11.2 移动操作系统 iOS 的发展 . 11.3 论文章节安排 . 2第二章 并发程序的设计 .32.1 摒弃线程 . 32.2 异步编程技术介绍 . 42.3 异步编程设计 . 52.4 衡量引入并发后对程序性能的影响 . 62.5 何时使用原生线程 . 6第三章 操作队列73.1 NSOperation 对象简介 . 7
2、3.2 子类化 NSOperation . 73.3 自定义操作对象的执行行为 .113.4 开始执行操作对象 .12第四章 调度队列. 154.1 调度队列介绍 .154.2 与队列相关的一些技术点 .164.3 使用 block 实现任务 .164.4 创建和管理调度队列 .174.5 添加任务到队列中 .204.6 挂起和恢复调度队列 .224.7 使用 dispatch 信号量控制可用的有限资源.234.8 等待一组任务的完成 .234.9 调度队列和线程安全 .24第五章 调度源. 255.1 Dispatch Source 介绍 . 255.2 创建 Dispatch Source
3、 . 265.3 使用调度源的一些例子 .29总 结 .35致 谢 .37参考文献 .39武汉工程大学 毕业论文- II -武汉工程大学 毕业论文-III-摘 要 移动互联网的浪潮席卷而至,随着智能手机等设备上中央处理器性能的提升,以及多核 CPU 在移动终端上的普及,每个处理器上的核心只会增加。这种设备性能上的提升使得其应用程序将会更加快捷流畅,程序更加高效以及产品更好的用户体验。在计算机中,单个核心下的并发一般为时间片的轮流,宏观上为多个任务同时执行,微观上每个时刻仍然只执行一个任务。由于多核时代的来临,线程才开始拥有了真正意义上的并行处理。多线程也作为越来越重要的一个部分需要开发者来掌握
4、。然而受限于设备能耗以及内存大小等问题,移动应用开发中的多线程编程又区别于其他程序开发。作为开发者,需要拥抱变化,积极的适应技术的发展,并提升自己。关键词:并发编程;移动互联网;多线程;移动应用开发武汉工程大学 毕业论文- IV -武汉工程大学 毕业论文-V-AbstractWith the advent of mobile Internet, CPU performance boost on Smartphones and other devices, Multi-core CPU on mobile devices became common, the cores of processor
5、 will more and more. This performance upgrades of device that make the application will be faster and more smooth, procedures more efficient, and it will have a better user experience. On the computer, concurrent of single core is time turns. Looks at the macro level is performed multiple tasks at t
6、he same time, micro level each time still perform only one task. Because of the advent of the multi-core processor, the thread began with a real sense of concurrent processing. Development of multithread increasing importance, and requires the developer to learn. However, due to the limitations of d
7、evices energy consumption and memory size, Concurrent programming in mobile application development is different from other programming. As a developer, you need to embrace change, learn the latest techniques, and improve yourself.Keywords:Concurrency Programming;Mobile Internet;Multithreading;Mobil
8、e application development武汉工程大学 毕业论文- VI -武汉工程大学 毕业论文-1-第一章 绪 论在移动应用开发中,由于受限与设备屏幕尺寸、处理器性能以及能耗等问题,与传统软件开发有不同之处。从提升程序性能开始,着重介绍如何利用多核处理器进行iOS 平台下的多线程开发。1.1 移动开发中的并发编程并发所描述的概念就是同时运行多个任务。这些任务在单核 CPU 上所采取的方案为时间片轮流,即同一时间段内执行多核任务,但是同一时刻只有一个任务处于执行状态。在多核 CPU 上才以真正的并行方式来运行。现在大多数智能设备处理器都至少有两个核心,移动操作系统能够并行的运行多个程
9、序,其中大多数的程序运行在后台,并且经常需要一小段 CPU 时间来执行任务。运行在前台的程序与用户交互并且占用大量的 CPU 时间。如果一个程序需要很多任务去执行,但是只能使用处理器中的一部分核心,那么多核的特性将无法发挥,额外的计算资源将被浪费。因此,程序需要充分利用处理器的多核特性,将处理器的性能充分挖掘出来,提高程序的性能以及用户体验。随着移动开发领域的快速发展,对于开发者,需要拥抱变化,尽快掌握移动端的多线程编程技术。1.2 移动操作系统 iOS 的发展在国内外,iOS 系统拥有众多开发者的支持, 2014 年 3 月份,AppStore 中的应用数已经超过 100 万,国内和国外开始
10、进入 iOS 开发领域的技术人员也再高速增长。OS X 和 iOS 提供了几种不同的 API 来支持并发编程。每一条 API 都具有不同的功能和使用上的一些限制,这就需要在不同的情景下使用最适合的并发方式。同时,这些 API 本身处在不同的抽象层级上。我们很可能会使用它们进行一些特别底层的操作,但同时也意味着将背负起处理好这些操作的责任。为了利用多核,计算机需要软件能够同时干多件事情。现代的多任务操作系统,可以有上百的程序在给定的时间内运行,所以可以调度每个程序执行在不同的核上。然而,大多数的程序属于系统驻守进程,或那些运行在后台,只需要很少 CPU 时间的程序。相反,真正的需要是为单个应用程
11、序高效地使用处理器额外的核心。应用程序利用多核的传统方式是创建多个线程,然而,由于核心的增加,有许多线程相关的问题需要解决,最大的问题是线程代码不能很好的拓展到任意数目的核心。不能创建很多的线程,然后认为程序会很好的运行这些线程。我们无法确认具体使用多少个核心才是最高效的,程序本身也无法很好地通过计算得出这个数值。即使得到了正确的数字,想要这么多线程之间不能干扰且高效运行,仍然具有很大的难度。所以我们需武汉工程大学 毕业论文- 2 -要一种抽象层次比线程高,同时效率又不能比线程太低的方式来处理并发。1.3 论文章节安排在过去,在程序中引入并发需要创建额外的一个或多个线程。不幸的是,写线程级别的
12、代码很具有挑战性。线程是很底层的工具,必须手动来管理。对于一个程序,由于线程的最佳数目基于系统负载和底层硬件而动态改变,因此实现一个正确的线程解决方案是非常困难和复杂的。此外,线程的同步机制通常会给软件设计增加复杂性和带来风险,有时候并不能保证一定会提高程序性能。相比较传统的基于线程的系统和应用程序,OS X 和 iOS 更多地采用异步方法来执行并行任务。应用程序只需要定义特定的任务,然后让系统执行它们,而不是直接创建线程。通过让操作系统来管理线程,使得应用程序具有了原生线程不可能具有的可扩展性,同时开发者也有了更加简单高效的编程模式。论文主要介绍了 iOS 平台下并发编程的技术和技巧,包含以
13、下章节:1. 并行和程序设计:介绍了基本的异步程序设计和异步执行自定义任务的技巧。2. Operation Queues(操作队列):介绍如何使用 Objective-C 对象封装任务并且执行。3. Dispatch Queue(调度队列):在 C 语言编程环境中,如何并行地执行任务。4. Dispatch Sources:如何异步的处理系统事件。武汉工程大学 毕业论文-3-第二章 并发程序的设计早期的计算机执行最小任务所需的时间单元取决于 CPU 的时钟速度,但随着 CPU技术的发展以及处理器上的核心越来越密集,散热和其他物理因素开始影响 CPU 的最大时钟速度。因此厂商们开始将注意力转移到
14、如何在单个芯片上加入更多的处理器核心,即多核 CPU,这样单个芯片的性能将又得到提升,因而剩下的问题就是如何充分利用这些增加的核心。传统意义上利用 CPU 多核特性的方式为创建多个线程,然而移动设备上的 CPU受限于系统负载和散热等其他因素,不可以创建大量的线程而又使得程序很好的运行。因此需要一种比较好的方式来解决移动端多线程编程的问题。2.1 摒弃线程线程是利用处理器多核特性最直接的方式,也是组成进程的子单元,操作系统的调度器可以对线程进行单独的调度。但是线程无法解决如何弹性地执行多个任务这个很普遍的问题,我们无法控制自己线程中的代码在什么时候开始执行,需要执行多长时间,什么时候暂停。直接使
15、用线程执行任务的另一个问题是,如果线程中的代码使用了框架或库时,那么执行任务所增加的线程总数有可能以指数级别增长。例如,在8 核 CPU 中,创建 8 个线程完成某个任务,看起来似乎充分利用了 CPU 的多个核心,但是很有可能每个线程中用到的某个框架又创建了多个线程 1。创建每个线程都会消耗一些内存和内核资源,因此如何动态地拓展线程数目就变得尤为重要,我们期望根据系统负载和当前可用的资源能够动态的控制当前活动线程的数量。如果把这项任务交由开发者,那么多线程编程将会变得更加复杂,因此,最好的方式是使用系统为我们提供的并发编程模型。为了不依赖于线程,iOS 中采用异步编程的方式来处理需要后台运行的
16、任务。异步这个概念已经存在于计算机中很长时间了,主要用于执行一些需要花费很长时间的任务,例如从磁盘中读取文件,从网络上获取数据等。当异步函数被调用后,任务就会在后台开始执行,同时函数会立刻返回,同时继续执行后续的任务。当处于后台中的任务执行完成后,会发送通知给调用者(通常为函数回调) ,调用者在函数回调中处理任务完成后的相关操作。这种异步的方式既不影响当前任务的执行,又能利用额外的核心完成非常耗时的操作。在 iOS 平台下,Apple 已经提供了几种异步的编程技术,下面主要介绍这些技术。使用异步编程的技术之一为 GCD(Grand Central Dispatch) 。这项技术能够将原本开发者需要编写的线程管理代码转移到系统级别,开发者只需定义需要执行的任务并将其添加到适合的调度队列即可。GCD 负责创建线程并在线程上执行任务所需的代码,现在由于线程管理是系统的一部分,GCD 接管了线程管理以及任务的执行,因此这种