0%

Concurrency Programming Guide

介绍

原文

并发是多个事情同时发生的概念。随着 CPU 核数的增加,开发者需要新的方式去利用它们。尽管像OS X和iOS这样的操作系统能够并行地运行多个程序,但这些程序大多在后台运行,执行的任务几乎不需要持续的处理器时间。当前的前台程序才是既能吸引用户的注意力,又能让计算机忙碌的程序。如果一个程序有很多任务要执行,但只保持一小部分可用的内核被占用,这些额外的处理资源就被浪费了。

以前程序引入多线程需要创建一个或多个线程。不幸的是写多线程代码很具挑战。线程是必须手动管理的底层技术。考虑到系统不同的负载和底层硬件,程序的最优线程数会动态变化,实现一个正确的线程方案变得异常困难。另外,通常与线程使用的同步机制会增加软件设计的复杂性和风险,而无法保证性能的提高。

与传统的基于线程的系统和程序相比,OS X和iOS都采用了一种更加异步的方法来执行并发任务。程序不需要直接创建线程,而只需要定义特定的任务,然后让系统执行这些任务。通过让系统管理线程,程序获得了原始线程不可能达到的可扩展性水平。程序开发人员也获得了一个更简单、更有效的编程模型。

本文描述了在程序中实现并发应使用的技术和工艺。本文描述的技术在OS X和iOS中都可用。

关于术语的说明

在进入关于并发性的讨论之前,有必要定义一些相关的术语以防止混淆。对UNIX系统或较早的OS X技术比较熟悉的开发者可能会发现本文中的术语“任务”、“进程”和“线程”的用法有些不同。本文档以下列方式使用这些术语:

  • 术语线程是用来指代码的独立执行路径。OS X中线程的底层实现是基于POSIX线程API的。
  • 术语进程是指一个正在运行的可执行文件,它可以包含多个线程。
  • 术语任务是用来指需要执行的工作的抽象概念。

关于这些术语和本文所使用的其他关键术语的完整定义,可参阅术语表

扩展阅读

本文重点介绍了在程序中实现并发性的首选技术,并不包括线程的使用。如果你需要关于使用线程和其他线程相关技术的信息,参阅Threading Programming Guide

欢迎关注我的其它发布渠道