Logo
Section 1 / 17

简介

让我们来看看本章将要介绍的一些重要概念!

导入

简介

让我们来看看本章将要介绍的一些重要概念!

本章内容概要

并发与并行是现代编程语言的核心特性。在 C++11 之前,语言本身并未提供对线程的标准支持——开发者只能依赖第三方库或系统 API。现代 C++ 逐步引入了越来越多必需的功能:线程、原子操作、锁机制、std::async 以及未来(futures)。

C++17 为我们提供了并行化大多数标准库算法的能力。通过一个强大且简洁的抽象层,你可以充分利用机器的计算能力。

在本章中,你将学习:

  • C++ 在并行与并发方面的发展方向
  • 为什么 std::thread 不足以满足所有需求
  • 执行策略(execution policies)是什么
  • 如何运行并行算法
  • 哪些算法已被并行化
  • 新增的并行算法有哪些
  • 并行执行的预期性能表现
  • 并行执行的示例与基准测试

观察我们周围的计算机设备可以发现,绝大多数都是多处理器架构。即使是智能手机也普遍拥有四核甚至八核处理器。更不用说显卡,它们配备了数百甚至上千个小型计算核心。

这一向多核架构发展的趋势,在 Herb Sutter 的著名文章《免费午餐已结束:软件中的并发根本转变》中得到了精辟总结。该文发表于 2006 年。

只需环顾四周,就能清楚地看到这一趋势仍在持续加速。

虽然对于简单的应用程序来说,可能并不需要完全利用机器的计算能力,但许多应用恰恰需要这种性能:游戏开发、快速响应的应用程序、图形处理、音视频编辑、数据处理、金融系统、服务器等。在 CPU 上创建线程并实现任务的并发处理,正是实现高性能的一种有效方式。

从 C++11/14 开始,我们终于在标准库中拥有了原生的线程支持。现在你可以直接创建 std::thread 实例,而不再依赖第三方库或系统接口。此外,还支持异步处理与未来(futures),即 std::async。

多线程是现代 C++ 中极为重要的组成部分。在 C++ 标准委员会中,专门设有“SG1, 并发”小组,致力于将更多类似功能引入标准。

未来的方向包括:

  • 协程(Coroutines)
  • 原子智能指针(Atomic Smart Pointers)
  • 事务内存(Transactional Memory)
  • 屏障(Barriers)
  • 任务块(Task Blocks)
  • 并行计算(Parallelism)
  • 计算(Compute)
  • 执行器(Executors)
  • 对异构编程模型的支持

由此可见,目标是尽可能充分地暴露机器的计算潜能,并直接通过标准库进行调用。


让我们开始吧。

文件系统

C++17 的并行性