理解什么是线程

线程(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)  评论(0)    收藏  举报