01 概述 | 《C++ Concurrency In Action》笔记

本系列笔记参考《C++ Concurrency in Action, 2nd Edition》及其中文翻译

并行与并发

并行指的是任务在物理上同时执行,并发指的是在任务在逻辑上同时执行。例如,在单核处理器上执行多个任务,处理器会通过快速切换时间片使多个任务看起来像是在同时执行,这便是并发;将多个任务分别分配到不同的处理器核上进行,这些任务在物理上是同时执行的,这便是并行。

随着多核处理器的普及,并发往往是通过在多个处理器核上同时执行任务来完成的,这使得并发与并行的界限越发模糊。如果非要对这两个概念加以区分的话,可能它们的区别在于使用时的侧重点的不同。“并行”更加注重性能,使用硬件提高数据处理速度时,会讨论程序的并行性。当关注重点在于任务分离或任务响应时,会讨论程序的并发性。现在,这两个术语存在的目的,就是为了区别多线程中不同的关注点。

为什么不使用并发

  • 使用并发的代码在很多情况下难以理解,因此编写和维护多线程代码会产生脑力成本,而增加的复杂性也可能会引起更多的错误
  • 线程的资源有限,如果太多的线程同时运行,则会消耗很多操作系统资源
  • 运行越多的线程,操作系统就需要越多的上下文切换,每一次切换都需要耗费时间

示例程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <thread>

void SubThread() {
// do something
}

int main() {
int thread_num = 8;
std::vector<std::thread> threads(thread_num);
for(int i = 0; i < thread_num; ++i) {
threads[i] = std::thread(SubThread);
}
for(int i = 0; i < thread_num; ++i) {
threads[i].join();
}
return 0;
}

01 概述 | 《C++ Concurrency In Action》笔记

http://www.zh0ngtian.tech/posts/2d7dfe0e.html

作者

zhongtian

发布于

2020-12-13

更新于

2023-12-16

许可协议

评论