【计算机基础速成】第十课:操作系统入门与进程、线程
1. 这节课的目标
进程和线程是操作系统面试中的超级高频基础题。
面试官经常会问:
- 什么是进程?
- 什么是线程?
- 进程和线程有什么区别?
- 为什么线程切换开销更小?
- 线程安全是什么?
这节课学完后,你至少要做到:
- 能说清进程和线程分别是什么
- 能回答进程和线程的区别
- 能解释为什么线程切换开销更小
- 对并发和线程安全建立最基础认知
2. 先建立最小认知
一句话理解
- 进程:程序运行起来后的一个独立执行单位
- 线程:进程中的一个执行流
更容易理解的类比
你可以把“进程”理解成一个工厂,把“线程”理解成工厂里的工人。
- 工厂有自己的空间和资源
- 工人共享工厂里的很多资源
- 一个工厂里可以有多个工人同时干活
这个类比虽然不完全严谨,但特别适合你现在快速建立直觉。
3. 什么是进程
一句话理解
进程是操作系统进行资源分配和调度的基本单位。
面试标准答法
进程是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。每个进程通常拥有自己独立的地址空间、代码、数据和系统资源。
怎么理解
比如你打开一个微信、一个浏览器、一个 IDE,它们在操作系统里通常都对应不同的进程。
4. 什么是线程
一句话理解
线程是进程中的一个执行单元,也是 CPU 调度的基本单位。
面试标准答法
线程是进程中的一个执行单元,是 CPU 调度的基本单位。一个进程中可以包含多个线程,这些线程通常共享进程的地址空间和大部分资源。
怎么理解
比如浏览器这个进程里,可能有:
- 渲染线程
- 网络线程
- JS 执行线程
它们都属于同一个进程,但承担不同工作。
5. 进程和线程的关系
一句话理解
线程不能脱离进程单独存在,线程通常依附于进程。
你可以这样记
- 先有进程这个“容器”
- 再有线程这些“执行流”
6. 进程和线程的区别
这是必背题。
| 对比项 | 进程 | 线程 |
|---|---|---|
| 定义 | 资源分配和调度的基本单位 | CPU 调度的基本单位 / 执行单元 |
| 资源 | 通常拥有独立资源空间 | 共享所属进程的大部分资源 |
| 开销 | 创建和切换开销更大 | 创建和切换开销更小 |
| 稳定性 | 一个进程崩溃一般不直接影响其他进程 | 一个线程异常可能影响整个进程 |
| 通信 | 进程间通信更复杂 | 线程间通信更方便 |
面试标准答法
进程和线程的主要区别在于资源占用和调度粒度。进程是资源分配和调度的基本单位,通常拥有独立的地址空间;线程是进程中的执行单元,多个线程共享进程资源,因此线程的创建和切换开销通常更小,但线程之间也更容易产生同步和安全问题。
7. 为什么线程切换开销更小
这也是常见追问题。
核心原因
因为线程共享所属进程的大部分资源,所以在线程切换时,不需要像进程切换那样切换大量独立资源和地址空间。
你现在可以这样理解
- 进程切换:像“换一个工厂干活”
- 线程切换:像“同一个工厂里换一个工人干活”
显然,后者通常更轻。
面试标准答法
线程切换开销通常比进程切换小,主要是因为同一进程中的线程共享地址空间和大部分资源,不需要像进程切换那样进行更重的资源切换和上下文切换。
8. 什么是并发
一句话理解
并发就是多个任务在一段时间内交替推进。
你现在不用纠结太深
面试里如果问到并发,你先能说出:
- 多个任务一起推进
- 可能涉及多个线程
- 会带来资源竞争问题
就够用了。
面试标准答法
并发指的是多个任务在同一时间段内交替执行或推进。在操作系统和后端开发中,并发常常意味着多个线程或多个请求同时竞争系统资源,因此需要考虑同步和线程安全问题。
9. 什么是线程安全
这也是后端岗位特别爱问的基础概念。
一句话理解
多个线程同时访问同一份数据时,结果仍然正确,这就叫线程安全。
举个例子
假设一个变量初始值是 0。
两个线程同时执行:
count = count + 1如果没有任何控制,理论上最后结果可能不是 2,而是 1。
这就是并发下的数据冲突问题。
面试标准答法
线程安全指的是在多线程并发访问共享资源时,程序依然能够表现出正确的行为,不会因为线程切换或竞争条件而出现数据错误或状态异常。
10. 为什么线程会带来安全问题
核心原因
因为多个线程共享同一进程的大部分资源。
共享资源带来的好处是:
- 通信方便
- 开销更低
但代价就是:
- 容易互相影响
- 容易产生竞争条件
这也是为什么后面要学习:
- 同步
- 互斥
- 锁
- 死锁
11. 一套适合面试的完整答法
如果面试官问:
你说一下进程和线程。
你可以这样答:
进程是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位,
通常拥有独立的地址空间和资源。
线程是进程中的一个执行单元,也是 CPU 调度的基本单位,
一个进程中可以有多个线程,这些线程共享进程的大部分资源。
相比进程,线程的创建和切换开销通常更小,线程之间通信也更方便,
但因为共享资源,所以也更容易带来线程安全和同步问题。这版回答已经很适合实习面试。
12. 本课高频面试题
12.1 什么是进程
标准回答
进程是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位,通常拥有独立的地址空间和系统资源。
12.2 什么是线程
标准回答
线程是进程中的一个执行单元,也是 CPU 调度的基本单位,一个进程中可以包含多个线程,这些线程通常共享进程资源。
12.3 进程和线程有什么区别
标准回答
进程通常拥有独立资源空间,创建和切换开销更大;线程共享所属进程的大部分资源,创建和切换开销更小,通信更方便,但也更容易出现线程安全问题。
12.4 为什么线程切换开销更小
标准回答
因为线程共享进程的大部分资源和地址空间,所以在线程切换时,不需要像进程切换那样切换大量独立资源,因此开销通常更小。
12.5 什么是线程安全
标准回答
线程安全指的是多个线程并发访问共享资源时,程序仍然能够表现出正确行为,不会因为竞争条件导致数据错误或状态异常。
13. 本课最小记忆卡片
卡片 1
- 进程:资源分配和调度的基本单位
卡片 2
- 线程:进程中的执行单元
- CPU 调度的基本单位
卡片 3
- 进程:资源独立
- 线程:共享资源
卡片 4
- 线程切换更轻
- 因为共享地址空间和大部分资源
卡片 5
- 并发:多个任务在一段时间内推进
卡片 6
- 线程安全:多线程访问共享资源仍然正确
14. 课后练习
14.1 口头复述题
请你尝试不看讲义回答:
- 什么是进程?
- 什么是线程?
- 进程和线程有什么区别?
- 为什么线程切换开销更小?
- 什么是线程安全?
14.2 今日最低完成标准
如果今天时间不多,至少完成下面任务:
- 背会本课 6 张最小记忆卡片
- 能完整回答进程和线程的区别
- 能说出线程为什么更容易带来线程安全问题
15. 下一课预告
第十一课:线程同步、互斥与死锁