1 进程
1.1 什么是进程
一个可执行文件运行起来,就可以看作是一个进程,进程是操作系统分配资源的最小单位。
1.2 怎么描述进程?
内核中使用进程控制块(PCB)来描述一个进程,每创建一个进程就会同时创建一个PCB这样的类的实例。
描述使用的PCB
组织使用的链表
1.2.1 PCB包含哪些信息?
- pid(进程id):身份标识
- 一组内存指针:指向进程运行时依赖的指令和数据在内存的哪个位置
- 进程的状态:是正在运行还是休眠
- 进程的优先级:这个进程是优先于CPU执行还是放到后面
- 进程的记账信息:记录了进程在CPU上一共执行了多长时间,通过这个时间来吸纳之不要让某个进程霸占CPU太久,导致其他进程无法进行
- 上下文:保存了上次进程在CPU上执行的进度,以便下次进程上CPU的时候能够继续执行
2 线程
2.1 为什么引入线程?
- 线程比进程更轻量,并发编程的时候,效率更高
- 线程之间共享的资源多,完成一些操作时更方便
其实就是因为进程太“重了”, 如果使用进程作为调度的基本单位的话,太消耗性能了。
所谓的线程是“轻量级”的进程,也是一种实现并发编程的方式。
创建一个线程比创建一个进程的成本低,销毁一个线程比销毁一个进程的成本也
成本低的原因是:创建一个线程,不需要给这个线程分配很多的资源(因为大部分资源都是和原来的资源共享的)
同一个进程的多个线程之间共享的资源主要是两个方面:
- 内存资源(但是两个不同进程之间的内存不能共享)
- 打开的文件
不能共享的资源:
- 上下文/优先级/状态/记账信息(每个线程之间都要独立的参与CPU的调度)
- 内存中有一块特殊的区域 栈 空间是每个线程要独立一份
2.2 进程和线程的区别和联系?
进程是资源分配的最小单位
线程是调度和执行的最小单位