并发是多个事件同时发生的意思。 随着多核CPU的兴起,每个处理器中的内核数量只会增加,软件开发人员需要新的方法来利用它们。 虽然像OS X和iOS这样的操作系统能够同时运行多个程序,但大多数程序运行在后台,执行的任务几乎不需要连续的处理器时间。 它是当前的前台应用程序,它们都捕获用户的注意力并保持计算机的繁忙。 如果一个应用程序有很多工作要做,但只占用可用内核的一小部分,这些额外的处理资源就会被浪费掉。
在过去,将并发引入应用程序需要创建一个或多个附加线程。不幸的是,编写线程代码是具有挑战性的。线程是一种低级的工具,必须手动管理。考虑到应用程序的最佳线程数可以根据当前系统负载和底层硬件动态地改变,如果可能实现的话,实现正确的线程解决方案变得非常困难。此外,通常与线程一起使用的同步机制增加了软件设计的复杂性和风险,而不保证改进性能。
与传统的基于线程的系统和应用程序相比,OS X和IOS采用了一种更异步的方法来执行并发任务。相较于直接创建线程,应用程序只需要去定义明确的任务然后让系统执行。通过让系统管理线程,应用程序获得原始线程不可能的伸缩性级别。应用程序开发人员还获得了一个更简单、更高效的编程模型。
本文档描述了您应用于在应用程序中实现并发性的技术和技术。 本文档中描述的技术可在OS X和iOS中使用。
本文档的组织
文档包含下面的章节:
- 并发性和应用程序设计介绍了异步应用程序设计的基本知识和异步执行自定义任务的技术。
- 操作队列说明了如何封装和使用Objective-C对象执行任务
- 调度队列说明了如何在基于C的应用程序中并发执行任务。
- 调度源说明了如何异步处理系统事件。
- 从线程迁移提供了将现有基于线程的代码迁移到使用较新技术的提示和技巧。
本文件还包括一个定义相关术语的词汇表。
关于术语的注释
在进行有关并发的讨论之前,有必要制定一些相关的术语来防止混淆。 更熟悉UNIX系统或旧版OS X技术的开发人员可能会发现本文档中使用的术语“任务”,“过程”和“线程”有所不同。 本文档以下列方式使用这些术语:
- 术语线程用于指代码的单独执行路径。 OS X中线程的底层实现基于POSIX线程API。
- 术语过程用于指代运行的可执行文件,其可以包含多个线程。
- 术语任务用于指代需要执行的工作的抽象概念。
有关本文档使用的这些和其他关键术语的完整定义,请参阅术语表。
参见
本文档重点介绍在应用程序中实现并发性的首选技术,并不涵盖使用线程。 如果您需要有关使用线程和其他线程相关技术的信息,请参阅 Threading Programming Guide。
网友评论