线程实现方式 :
- 用户线程(User Thread) : 由用户态的线程库管理线程
- 内核线程(Kernel Thread) : 由内核管理的线程
- 轻量级进程(LightWeight Process) : 在内核中管理用户线程
用户/内核线程关系 :
- 一对一 : 一个用户线程对应一个内核线程
- 多对一 : 多个用户线程对应同个内核线程
- 多对多 : 多个用户线程对应多个内核线程
一对一 :
多对一 :
多对多 :
用户线程
线程管理库 : 管理用户线程调度 , 系统不管
用户线程优点:
- 用户线程库管理线程控制块 (TCB) 列表,记录各线程状态信息 (PC、栈指针、寄存器)
- 线程库管理用户线程切换 , 无需用户/内核态切换,速度较快
用户线程缺点:
- 操作无法调度线程,当用户线程阻塞,那该进程的所有用户线程都无法执行
- 用户线程没法抢占运行线程
- 时间片分配给进程,多线程的每个线程的时间片较少
内核线程
内核线程 : 由操作系统管理
- 线程的 TCB 放在操作系统中
内核线程优点:
- 进程内,某个内核线程阻塞,不会影响其他内核线程的运行
- 多线程获更多 CPU 运行时间
内核线程缺点:
- 由内核管理进程和线程的上下文信息,如 : PCB 和 TCB
- 通过系统调用管理线程的创建、终止和切换 , 系统开销较大
轻量级进程
轻量级进程 (Light-weight process , LWP) : 内核支持的用户线程
- 每个 LWP 与每个内核线程对应
LWP/用户线程关系 :
1 : 1
: 一个 LWP 对应一个用户线程N : 1
: 一个 LWP 对应多个用户线程M : N
: 多个 LWP 对应多个用户线程
1 : 1
模式 : 一个线程对应一个 LWP 对应一个内核线程 , 如 : 进程 4
- 优点 : 实现并行,当某个 LWP 阻塞,不会影响其他 LWP
- 缺点:每个用户线程,用一个内核线程,创建线程开销较大
N : 1
模式 : 多个用户线程对应一个 LWP 对应一个内核线程 , 如 : 进程 2
- 优点 : 线程上下文切换发生用户空间,切换效率较高
- 缺点 : 某个用户线程阻塞,则整个进程都会阻塞 , 没法充分利用多核 CPU
M : N
模式 : 多个用户线程对应到多个 LWP,LWP 再对应每个内核线程,如 : 进程 3
- 优点 : 大部分的线程上下文发生在用户空间,且多个线程又充分利用多核 CPU