并发编程指南:概要

原文:Concurrency Programming Guide

翻译: skycolor

Concurrency is the notion of multiple things happening at the same time. With the proliferation of multicore CPUs and the realization that the number of cores in each processor will only increase, software developers need new ways to take advantage of them. Although operating systems like OS X and iOS are capable of running multiple programs in parallel, most of those programs run in the background and perform tasks that require little continuous processor time. It is the current foreground application that both captures the user’s attention and keeps the computer busy. If an application has a lot of work to do but keeps only a fraction of the available cores occupied, those extra processing resources are wasted.

并发是一个这样的概念:多件事情在同时发生。随着多核CPU的激增,在每个处理器核心数只会逐渐增加的现实下,软件开发者需要新的方法来利用这些核。尽管操作系统(如OS X和iOS)都有能力并行运行多个程序,但是这些程序大部分都在后台,而且执行任务的时候也只需要很少的连续处理器时间。正是前台的应用程序吸引了用户的注意,并且让计算机忙碌。如果一个应用程序有很多工作要做,但是只让可利用的多核心中的一小部分核心工作,那么这些额外的处理资源就被浪费了。


In the past, introducing concurrency to an application required the creation of one or more additional threads. Unfortunately, writing threaded code is challenging. Threads are a low-level tool that must be managed manually. Given that the optimal number of threads for an application can change dynamically based on the current system load and the underlying hardware, implementing a correct threading solution becomes extremely difficult, if not impossible to achieve. In addition, the synchronization mechanisms typically used with threads add complexity and risk to software designs without any guarantees of improved performance.

在过去,在应用程序中使用并发要创建一个或多个附加的线程。不幸的是,写线程相关的代码是一个具有挑战性的事情。线程是一个低级工具,而且必须要手动管理。考虑到一个应用程序的最优线程数量是基于当前系统负载和底层硬件动态变化的,那么要实现一个正确线程解决方案就变得极其困难,也不是不可能实现。此外,通常与线程一起使用的同步机制也增加了复杂度,同时也让软件设计没有了性能提升的保证。


Both OS X and iOS adopt a more asynchronous approach to the execution of concurrent tasks than is traditionally found in thread-based systems and applications. Rather than creating threads directly, applications need only define specific tasks and then let the system perform them. By letting the system manage the threads, applications gain a level of scalability not possible with raw threads. Application developers also gain a simpler and more efficient programming model.

OS X和iOS都大量采用了异步的方式来实现并发任务,而不是基于线程的系统和应用程序中那样传统的做法。与其直接创建线程,应用程序不如只需定义指定任务,然后让系统去执行它们。通过让系统来管理线程,应用程序获得了一定的伸缩性而不是和原始线程打交道的可能。同时,应用开发者也获得了一个更加简洁高效的编程模型。


This document describes the technique and technologies you should be using to implement concurrency in your applications. The technologies described in this document are available in both OS X and iOS.

这篇文档中描述的技术与方法可以让你在应用中实现并发编程。文档中描述的这些方法在OS X和iOS中都可使用。


Organization of This Document

This document contains the following chapters:

Concurrency and Application Designintroduces the basics of asynchronous application design and the technologies for performing your custom tasks asynchronously.

Operation Queuesshows you how to encapsulate and perform tasks using Objective-C objects.

Dispatch Queuesshows you how to execute tasks concurrently in C-based applications.

Dispatch Sourcesshows you how to handle system events asynchronously.

Migrating Away from Threadsprovides tips and techniques for migrating your existing thread-based code over to use newer technologies.

This document also includes a glossary that defines relevant terms.

文档组织

这篇文档包含了如下章节:

1. 并发编程与应用设计:本章节介绍了异步应用设计的基本概念和异步执行自定义任务的方法。

2. 操作队列:向你展示了如何使用Objective-C对象封装和执行任务。

3. 派发队列:向你展示了如何在基于C的应用中并发执行任务。

4. 派发源:向你展示了如何异步处理系统事件。

5. 迁出线程:对于将现存的基于线程的代码转化为使用新技术的代码,本章节提供了提示和技术方案。


A Note About Terminology

Before entering into a discussion about concurrency, it is necessary to define some relevant terminology to prevent confusion. Developers who are more familiar with UNIX systems or older OS X technologies may find the terms “task”, “process”, and “thread” used somewhat differently in this document. This document uses these terms in the following way:

The term thread is used to refer to a separate path of execution for code. The underlying implementation for threads in OS X is based on the POSIX threads API.

The term process is used to refer to a running executable, which can encompass multiple threads.

The term task is used to refer to the abstract concept of work that needs to be performed.

For complete definitions of these and other key terms used by this document, see Glossary.

术语注解

在开始讨论并发编程之前,为了防止迷惑,有必要先定义一些相关的术语。熟悉UNIX或旧版本OS X系统的开发者可能会发现:文档中不同的使用了“task”, “process”和 “thread”这些术语。这篇文档用下面的方式使用这些术语:

#术语 thread 用来指独立的代码执行路径。OS X底层的线程实现是基于POSIX 线程 API。

#术语 process 用来指正在运行的可执行代码,它包含多个线程。

#术语 task 用来指需要被执行的工作的抽象概念。

这些术语完整的定义和文档中使用的其他术语参见术语表。


See Also

This document focuses on the preferred technologies for implementing concurrency in your applications and does not cover the use of threads. If you need information about using threads and other thread-related technologies, seeThreading Programming Guide.

其他参考

这篇文档聚焦在应用中实现并发编程的更好的技术,而没有关注线程的使用。如果你需要关于线程使用和其他线程相关的技术,可以参考线程编程指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 第1章 严肃古朴的臣子府邸,书房外,一灯如豆。 “昨日东宫又传了太医,太子怕是命不久矣矣。” “大人,太子如今已是...
    陈看米阅读 830评论 4 21