1. 线程和进程
1.1 线程定义
进程(process)具有两大特点:
- 资源所有权: 进程包含存放进程映像的虚拟地址空间
- 调度/执行: 进程具有执行状态和优先级,是可被系统调度与分派的实体
通常把调度/执行的基本单位称为线程,拥有资源所有权的基本单位称为进程
1.2 多线程
操作系统在单个进程中支持多个并发执行路径的能力叫做多线程(multithreading)
区别并发(concurrency)和并行(parallelism)
- 并发:能够处理多个任务的能力,没有要求同时处理
- 并行:强调能够同时处理多个任务,并行是并发的子集
1.3 线程&进程
| | 进程 | 线程 | | —- | :—-: | :—-: | | 关联属性 |
- 存放映像的虚拟地址空间
- 对处理器,其他进程,文件和IO资源的受保护访问
|
- 线程执行状态
- 未运行线程的上下文
- 执行栈
- 存放局部变量的静态存储空间
- 与其他进程内线程共享的内存和资源访问
| | 进程管理 |
- 进程只有一个相关的控制块和地址空间
- 进程运行时,CPU寄存器被进程控制
- 未运行时,保存寄存器中内容
|
- 每个线程有单独的栈和控制块,其中包含寄存器值,优先级等线程相关属性
- 进程中所有线程共享进程的状态和资源
|
2. 线程特点
2.1 线程功能
- 派生(spawn):派生新进程同时派生一个线程,线程可在进程中继续派生线程,新线程放在就绪队列中
- 阻塞/解除阻塞:当前线程发送等待,处理器执行另一个就绪进程,当事件发生,线程重新入队
-
2.2 线程优点
线程创建更快速
- 终止线程更快速
- 线程切换更快速
- 同进程中线程的通信效率高于独立进程通信效率
2.3 线程分类
| 用户级线程(User-Level Thread, ULT) | 内核级线程(Kernel-Level Thread, KLT) | | :—-: | :—-: | | 管理线程的所有工作都由应用程序完成,内核意识不到线程的存在
| 管理线程的工作由内核完成,
| | ULT对比KLT | | | ULT优点
- 线程的管理切换无需特权 - 调度算法可根据程序调整
- ULT可在任何OS运行,依靠应用层级的线程库,无需底层内核支持
ULT缺点
- ULT在执行系统调用时,除了阻塞线程,还会阻塞进程中所有线程
- 纯ULT中,无法使用多处理技术,内核一次只能给一个进程分配一个处理器 | |