NOTE
2.7 程序、进程、线程
1. 是什么 程序是指令的集合,存放在硬盘上,是个静态的实体 进程指程序加载到内存,由CPU执行指令,是个动态的实体 线程是进程内的多个执行流 举例: 比如一个视频播放器,安装完后躺在硬盘上,此时就是一堆指令+数据; 播放一个视频的时候这个程序首先加载到内存中,由CPU读取指令并执行 一个视频既有画
这是历史学习笔记,可能存在过时或不完整的理解。
1. 是什么
程序是指令的集合,存放在硬盘上,是个静态的实体 进程指程序加载到内存,由CPU执行指令,是个动态的实体 线程是进程内的多个执行流
举例: 比如一个视频播放器,安装完后躺在硬盘上,此时就是一堆指令+数据; 播放一个视频的时候这个程序首先加载到内存中,由CPU读取指令并执行 一个视频既有画面又有声音,这两个要同时进行,那么就有两个线程,一个负责声音,一个负责画面
2. 进程-线程-协程的发展历史
2.1. 单进程操作系统
- 一个进程一个进程的顺序执行
- 问题
- 一个进程执行完才能执行下一个进程
- 如果进程阻塞了,那么会白白浪费CPU的资源
2.2. 多进程/多线程操作系统
- 一个进程阻塞后切换到下一个进程执行
- 问题
- CPU切换成本。进程/线程数量越多,成本越大,高峰时期可能60%用于执行程序,40%用于切换

- 占用资源大。进程占用4G虚拟内存,线程占用4MB内存
2.3. 协程
-
N:1
- 优点:协程在用户态线程即完成切换,不会陷入到内核态,这种切换非常的轻量快速
- 缺点:一旦某协程阻塞,造成线程阻塞,本进程的其他协程都无法执行了,根本就没有并发的能力了

-
1:1
- 优点:解决了N:1的问题
- 缺点:协程的创建、删除和切换的代价都由 CPU 完成

-
M:N
- 优点:解决了N:1和1:1的缺点
- 缺点:实现复杂

3. 进程状态转换

- 就绪状态(ready):等待被调度
- 运行状态(running)
- 阻塞状态(waiting):等待资源
4. 进程 VS 线程
| 进程 | 线程 | |
|---|---|---|
| 定义 | 程序的动态实体,一个程序至少有一个进程 | 进程中一个执行路径,一个进程至少有一个线程 |
| 基本单位 | 资源分配的基本单位 | 系统调度的基本单位 |
| 地址空间 | 有独立的地址空间,不会一崩全崩 | 共享进程的地址空间,有一个崩溃那么其他也会崩溃 |
| 开销 | 较大 | 较小 |
| 通信 | IPC | 共享内存 |
4.1. 进程和线程哪个切换快,为什么
线程切换比进程快,因为线程共享地址空间,而进程有独立的地址空间,如果进程切换还得加上虚拟空间切换的开销
5. 线程 VS 协程
线程由 CPU调度、抢占式的,协程由 用户态调度、协作式

