无题
进程
[!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. 线程的创建
线程通过创建原语进行创建,
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Niuzhuoqun's BLOG!