1.1 何为并发
1.1.1 计算机系统中的并发
单个系统中 “同时” 执行多个独立的任务。
1.1.2 并发的途径
-
多进程
将应用程序分为多个独立的进程,它们同一时刻运行。进程间可以通过一些进程间通信方式(管道、信号、信号量、共享内存、消息队列、套接字等)进行信息传递。
优点:操作系统在进程间提供附加的保护操作和更高级别的通信机制,编程简单;可以通过远程连接,在不同的机器上运行独立的进程。
缺点:设置复杂、速度慢,运行多个进程需要的开销大。 -
多线程
在单个进程中运行多个线程。进程中的所有线程共享地址空间。
优点:开销小,创建切换简单、速度快、CPU利用率高
缺点:编程困难,可靠性差。
1.1.3 并发与并行
并发:一个时间段内。
并行:同一时刻。
1.2 为什么使用并发?
1.2.1 为了分离关注点
将相关的代码与无关的代码分离,可以使程序更容易理解和测试。
1.2.2 为了性能
两种方式利用并发提供性能:
- 任务并行:将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。
- 数据并行:每个线程在不同的数据部分上执行相同的操作。
1.2.3 什么时候不使用并发
收益比不上成本。
性能增益小于预期
线程的资源有限
运行越多的线程,操作系统就需要越多的上下文切换。
1.3 C++ 中的并发和多线程
1.3.2 新标准支持并发
C++11标准库中扩展了:包含了用于管理线程、保护共享数据、线程间同步操作、低层原子操作的各种类。