深入理解计算机系统 第十二章 并发编程
如果逻辑控制流在时间上重叠,那么它们就是并发的(concurrent)
这种常见的现象称为并发(concurrency),出现在计算机系统的许多不同层面上。
并发不仅仅局限于内核,它也可以在应用程序中扮演重要角色。
应用级并发在以下情况中都是很有用的:
1、访问慢速 I/O 设备
当一个应用正在等待来自慢速 I/O 设备(例如磁盘)的数据到达时,内核会运行其它进程,使 CPU 保持繁忙。每个应用都可以按照类似的方式,通过交替执行 I/O 请求和其他有用的工作来利用并发。
2、与人交互
和计算机交互的人要求计算机有同时执行多个任务的能力
3、通过推迟工作来降低延迟
4、服务多个网络客户端
一个并发服务器,可以为每个客户端创建一个单独的逻辑控制流。这就允许服务器同时为多个客户端服务,并且也避免了慢速客户端独占服务器
5、在多核机器上进行并行计算
被划分成并发流的应用程序通常在多核机器上比在单处理器机器上运行得快,因为这些流会并行执行,而不是交错执行
使用应用级并发的应用程序称为并发程序,现代操作系统提供了三种基本的构造并发程序的方法:
1、进程。
用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显示的进程间通信(interprocess communication,IPC)机制
2、I/O 多路复用
在这种形式的并发编程中,应用程序在一个进程的上下文中显示地调用它们自己的逻辑流。逻辑流被模型化为状态机,数据到达文件描述符后,主程序显示地从一个状态转换到另一个状态。因为程序是一个单独的进程,所以所有的流都共享同一个地址空间
3、线程
线程是运行在一个单一进程上下文中的逻辑流,由内核进行调度。可以把线程看成是其他两种方式的混合体,像进程流一样由内核进行调度,而像 I/O 多路复用一样共享一样共享同一个虚拟地址空间