进程

[!NOTE] 进程
进程是系统资源分配的最小单位

进程是程序或者说是代码的运行时。

进程管理的资源

进程管理的资源均可以在PCB(process control block进程控制块)找到
PCB

缓存

线程

[!NOTE] 线程
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一个进程中可以并发多个线程,每个线程执行不同的任务。

线程的类别

1. 按实现方式分类(最常见)

类型 别名 特点 优缺点
用户级线程(User-Level Threads, ULT) 用户线程 由用户态的线程库(如 pthread)创建和管理,操作系统内核不知道其存在。多个用户线程映射到一个或多个内核线程。 ✅ 轻量、创建/切换快
❌ 无法利用多核并行
❌ 一个线程阻塞会导致整个进程阻塞(除非使用异步I/O)
内核级线程(Kernel-Level Threads, KLT) 内核线程 由操作系统内核直接管理和调度,每个线程在内核中有对应的控制块(如 task_struct in Linux)。 ✅ 可并行执行(多核)
✅ 阻塞不影响其他线程
❌ 创建/切换开销大
混合型线程(Hybrid Threads) 多对多模型 用户线程和内核线程之间采用多对多映射,由用户库和内核共同管理。 ✅ 兼顾灵活性与性能
❌ 实现复杂

📌 现代主流系统(如Linux、Windows、macOS)普遍采用 1:1 模型:每个用户线程直接对应一个内核线程(轻量级进程 LWP),由内核调度。


2. 按功能或用途分类

类型 说明
主线程(Main Thread) 进程启动时默认创建的第一个线程,负责执行 main() 函数。
工作线程(Worker Thread) 执行具体任务的线程,常用于线程池中处理任务队列。
守护线程(Daemon Thread) 后台运行的线程,不阻止进程退出(如Java中的GC线程)。
异步线程(Async Thread) 用于执行异步操作,如网络请求、文件读写等,避免阻塞主线程。

3. 按调度方式分类

类型 说明
可抢占式线程(Preemptive) 操作系统可以强制中断线程,调度其他线程(现代系统主流)。
协作式线程(Cooperative) 线程必须主动让出CPU,否则不会切换(如早期Windows 3.x、某些协程)。

4. 特殊线程类型

类型 说明
纤程(Fibers) 用户态的协作式轻量线程,由程序自行调度(如Windows Fibers)。
协程(Coroutines) 更轻量的执行单元,支持挂起/恢复,常用于高并发I/O(如Python asyncio、Go goroutines)。

线程的底层实现以及切换流程

1. 线程的创建

线程通过创建原语进行创建,