线程
- 线程
- 定义
- 线程是进程中的一个可执行实体,表示进程的子任务。
- OS 以进程为单位分配资源,以线程为单位调度。
- 组成
- 每个线程有一个 TCB,类似 PCB。
- 线程标识符
- CPU 状态
- CPU 现场保护区
- PC
- SP
- 其他寄存器
- 栈:包括用户栈和内核栈
- 关联的进程和线程指针
- 定义
- 线程与进程的对比
- 资源
- 进程拥有独立的地址空间,存放代码和数据,打开若干文件。
- 进程包含至少一个线程,进程创建时创建第一个线程。
- 线程共享进程的所有资源,线程自身包含很少资源。
- 调度
- 进程调度要切换进程上下文,开销大。
- 同一进程内的线程调度只切换线程上下文,开销小。
- 不同进程的线程调度相当于进程调度。
- 并发
- 基于线程的并发性比进程高。
- 安全
- 线程可以访问进程数据,可以改变其他线程的数据,共享数据方便,但容易发生数据竞争。
- 资源
- 线程的系统支持
- 用户级
- 线程功能完全在用户程序实现。
- OS 的调度单元还是进程,一个线程阻塞实际上是进程阻塞,所有线程都无法执行。
- 核心级
- 内核实现线程功能,用户程序使用线程都是通过系统调用,1:1 模型。
- OS 的调度单元是线程,一个线程阻塞不影响其他线程。
- 两级结合
- 内核实现线程功能,用户程序实现运行时,在多个核心级线程上调度用户级线程,M:N 模型。
- 用户级
- LWP
- LWP 即 Light Weight Process,与内核线程一一对应。
- 进程可以申请多个 LWP,LWP 可以并发执行多个用户级线程。
- Linux 的线程是 LWP