- 1.1 并发概念
- 1.1.1 计算机系统中的并发
- 1.1.2 并发方式
- 1.1.3 并发与并行
- 1.2 使用并发原因
- 1.2.1 分离关注点
- 1.2.2 性能提升
- 1.2.3 何时避免并发
- 1.4 启程上路
concurrency,两个或多个同时独立进行的活动。
1.1.1 计算机系统中的并发 同一个系统中,多个独立活动同时进行,而非依次进行。
多核处理器真正并行运作多个任务,称为硬件并发(hardware concurrency)。
任务切换时,必须完成一次上下文切换(context switch),操作系统保存当前任务的CPU状态和指令指针,判断切换到哪个任务,可能需要将新任务的指令和数据从内存加载到缓存。
硬件支持的线程数(hardware threads),硬件自身真正支持同时运行的独立任务的数量。
- 多进程并发
独立进程通过信号、套接字、文件、管道等通信,设置复杂,速度慢,开销大,费时,更安全,可运行在不同计算机上(网络通信)。 - 多线程并发
线程像轻量级进程,独立运行,各自执行不同的命令序列,共用相同的地址空间,直接访问进程的大部分数据。
都是指使用可调配的硬件资源同时运行多个任务,但并行(parallel)更强调性能(多核同时处理数据)。
1.2 使用并发原因 1.2.1 分离关注点隔离不同领域的操作,比如gui与后台数据处理。
1.2.2 性能提升 单一任务分解成多个部分,各自并行运作,节省总运行耗时,任务并行。
线程分别对数据的不同部分执行同样操作,数据并行。
收益不及代价。
多线程需要额外开发时间和相关维护成本,线程启动固有开销,线程是一种有限资源(考虑线程池),线程越多,上下文切换越频繁,需根据可用硬件并发资源,调整运行线程数量。
- 单线程
#includeusing namesapce std; int main() { cout <<"Hello World!" <
- 多线程
#include#include using namesapce std; void hello() { cout <<"Hello World!" < thread t(hello); t.join(); return 0; }



