跳转至

线程调度

线程调度分为用户级线程调度核心级线程调度,二者各自有不同的工作方式和特点。


用户级线程调度

  • 调度机制:核心不直接负责用户级线程的调度,而是将CPU分配给某个进程(例如进程A),并为其分配一个时间片。在此时间片内,由进程A内部的线程调度程序负责选择具体执行的线程(如线程A1或A2)。
  • 线程切换:进程A的多个线程可以在该进程内部进行切换,核心对线程的切换并不干涉。只有当核心决定切换到另一个进程时,才会发生进程级别的切换。
  • 性能:用户级线程切换使用机器指令,切换速度快。
  • 阻塞情况:当用户级线程因I/O操作等原因阻塞时,整个进程也会被挂起,导致进程内的其他线程无法运行。

核心级线程调度

  • 调度机制:由核心直接负责线程的调度。核心能够调度并切换不同进程的线程,使不同进程的线程之间可以进行切换。
  • 线程切换:核心在切换不同进程的线程时会进行完整的上下文切换,确保系统管理和调度的精确性。
  • 性能:核心级线程切换需要进行完整的上下文切换,因此切换速度相对较慢。
  • 阻塞情况:在核心级线程方式下,一个线程因等待I/O而阻塞时,不会导致整个进程被挂起,进程内的其他线程仍可继续运行。

用户级线程调度与核心级线程调度的比较

特点 用户级线程调度 核心级线程调度
调度速度 切换速度快,直接使用机器指令 切换速度较慢,需完整上下文切换
阻塞处理 单个线程阻塞会挂起整个进程 单个线程阻塞不会影响进程内其他线程
调度控制 由进程内部的线程调度程序负责 由核心直接负责调度与切换

用户级线程调度适用于轻量级、无阻塞需求的任务,而核心级线程调度适用于需要细粒度管理和支持高并发的场景。