1
第 13 章 多线程与多核编程
多任务的并发执行会用到多线程(multithreading),而 CPU 的多核(mult-core)化又将
原来只在巨型机中才使用的并行计算(parallel computing)带入普通 PC 应用的多核程序设
计(multi-core programming)中。
13.1 进程与线程
进程(process)是执行中的程序,线程(thread)是一种轻量级的进程。
13.1.1 进程与多任务
现代的操作系统都是多任务(multitask)的,即可同时运行多个程序。进程(process)
是位于内存中正被 CPU 运行的可执行程序。参见图 15-1。
图 15-1 程序与进程
目前的主流计算机采用的都是冯·诺依曼(John von Neumann)体系结构——存储程序
计算模型,程序(program)就是在内存中顺序存储并以线性模式在 CPU 中串行执行的指令
序 列 。 对 于 传 统 的 单 核 CPU 计 算 机 , 多 任 务 操 作 系 统 的 实 现 是 通 过 CPU 分 时
(time-sharing)和程序并发(concurrency)完成的。即在一个时间段内,操作系统将 CPU
分配给不同的程序,虽然每一时刻只有一个程序在 CPU 中运行,但是由于 CPU 的速度非常
快,在很短的时间段中可在多个进程间进行多次切换,所以用户的感觉就像多个程序在同时
执行,我们称之为多任务的并发。
13.1.2 进程与线程
程序一般包括代码段、数据段和堆栈,对具有 GUI(Graphical User Interfaces,图形用
户界面)的程序还包含资源段。进程(process)是应用程序的执行实例,即正在被执行的程
序。每个进程都有自己的虚拟地址空间,并拥有操作系统分配给它的一组资源,包括堆栈、
寄存器状态等。
线程(thread)是 CPU 的调度单位,是进程中的一个可执行单元,是一条独立的指令执
行路径。线程只有一组 CPU 指令、一组寄存器和一个堆栈,它本身没有其他任何资源,而
是与拥有它的进程共享几乎一切,包括进程的数据、资源和环境变量等。线程的创建、维护
和管理给操作系统的负担比进程要轻得多,所以才叫轻量级的进程(lightweight process)。
一个进程可以拥有多个线程,而一个线程只能属于一个进程。每个进程至少包含一个线
程——主线程,它负责程序的初始化工作,并执行程序的起始指令。随后,主线程可为执行
各种不同的任务而分别创建多个子线程。
一个程序的多个运行,可以通过启动该程序的多个实例(即多个进程)来完成,也可以
程序 =
进程(内存中)
可执行文件(磁/U/光盘上)
运行
评论0