线程(Thread)在操作系统中的并发执行机制
1. 线程的定义
- 基本单位:线程是CPU调度的最小单位。在某些系统(如Linux)中,尽管进程可能是调度的基本单位,但线程是实际执行流。
- 资源归属:线程必须依附于进程存在。同一进程内的多个线程共享以下资源:
- 内存空间(代码段、数据段、堆)
- 文件句柄
- 信号处理
- 全局变量等
2. 操作系统线程的实现
内核级线程(KLT)
- 管理:由操作系统内核直接管理。
- 调度与生命周期:线程的调度、创建、销毁由内核完成。
- 优点:内核可以感知所有线程,调度更灵活。
- 缺点:线程切换需要从用户态到内核态的转换,开销较大。
用户级线程(ULT)
- 管理:由用户空间的线程库(如早期Java Green Thread)管理。
- 内核感知:内核仅感知进程,对ULT透明。
- 优点:线程切换无需内核介入,速度快。
- 缺点:一个ULT阻塞会导致整个进程阻塞。
现代混合模型
- 实现:结合KLT和ULT(如Windows线程+IOCP,Linux的NPTL)。
- 映射:通常采用"M:N"映射(M个ULT映射到N个KLT)。
3. 线程的关键特性
- 独立执行流:每个线程有独立的栈(stack)和程序计数器(PC)。
- 共享资源:
- 进程级资源:内存、文件等。
- 需同步访问的共享数据(通常使用mutex/semaphore保护)。
- 生命周期:
- 创建:使用pthread_create()(POSIX)或std::thread(C++)。
- 终止:正常退出或被其他线程取消(pthread_cancel())。
- 回收:使用pthread_join()避免僵尸线程。
4. 线程 vs 进程
| 特性 |
线程 |
进程 |
| 资源分配 |
共享进程资源 |
独立资源分配 |
| 通信方式 |
直接读写共享内存 |
管道/消息队列/共享内存 |
| 创建开销 |
小(仅分配栈和PC) |
大(分配完整资源) |
| 调度单位 |
轻量级(CPU调度基本单位) |
较重(某些系统为调度单位) |
5. 操作系统线程调度
- 调度策略:
- 时间片轮转(RR)
- 优先级调度(CFS完全公平调度器)
- 实时调度(FIFO/RR)
- 状态转换:
- 就绪 → 运行(获得CPU)
- 运行 → 阻塞(等待I/O)
- 阻塞 → 就绪(I/O完成)
6. 线程的典型应用场景
- I/O密集型:如Web服务器处理大量并发请求。
- 计算密集型:通过多线程利用多核CPU(任务需可拆分)。
- GUI程序:主线程处理界面,后台线程处理计算。
posted @
2025-03-26 20:52
Ashe|||^_^
阅读(
171)
评论()
收藏
举报