2-2 进程和线程
进程
进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。
进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。
进程的特征
进程依赖于程序运行而存在,进程是动态的,程序是静态的。
每个进程拥有独立的地址空间,地址空间包括代码区、数据区和堆栈区,进程之间的地址空间是隔离
的,互不影响。
线程
线程被设计成进程的一个执行路径,同一个进程中的线程共享进程的资源,因此系统对线程的调度所
需的成本远远小于进程。
一个进程可能包含多个线程,但一个线程只能属于一个进程。

进程和线程的区别
| 对比维度 | 进程 | 线程 |
|---|---|---|
| 本质区别 | 操作系统资源分配的基本单位 | 处理器任务调度和执行的基本单位 |
| 包含关系 | 至少包含一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程 | 隶属于一个进程,是进程的执行单元 |
| 资源开销 | 每个进程都有独立的地址空间,进程之间的切换会有较大的开销(需保存代码、数据、堆栈等) | 线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。 |
| 崩溃影响 | 一个进程崩溃不影响其他进程:一个进程崩溃后,在保护模式下其他进程不会被影响 | 线程崩溃可能导致整个进程终止:一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。 |
| 内存隔离性 | 进程间地址空间隔离,互不影响 | 同一进程的线程共享内存(代码、数据、堆),可直接通信 |
| 独立性 | 独立运行,拥有完整的程序上下文 | 依赖进程存在,不能独立执行 |
| 通信方式 | 需通过IPC(管道、共享内存等) | 可直接读写共享变量(需同步机制) |
例题
例题1

解析:一个进程可能包含多个线程,但每个线程只能属于一个进程。
例题2


解析:一个程序执行有一个或者多个进程,一个进程包含一个或多个线程,进程之间相互独立,但同一个进程下的各个线程之间共享程序的内存空间(堆栈、代码段等)及进程级的资源(打开文件、信号等),但是进程内的线程间资源如题目中T1、T2、T3自己的栈指针不可共享。