操作系统之线程的实现主要包括两种方式:内核支持的线程和线程库支持的线程(通常也涉及用户级线程的概念)。
内核支持的线程(KST, Kernel Supported Threads):
线程在内核的支持下运行,线程的创建、阻塞、撤销和切换等操作都在内核空间内完成。
内核为每个线程设置一个线程控制块(TCB),通过TCB来感知和控制线程。
在多处理器系统中,内核能够同时调度同一进程中的多个线程并发执行。
当一个线程阻塞时,内核可以调度该进程中的其他线程继续执行。
线程库支持的线程(通常与用户级线程相关):
线程库(如C++11中的线程库)提供了创建和管理线程的接口。
用户级线程的创建、撤销、同步和通信等操作在用户空间中实现,无需内核的直接支持。
用户级线程的调度通常以进程为单位进行,但具体的调度算法可以由用户自定义。
用户级线程的优点是线程切换开销小,因为不需要经历用户态到内核态的切换。但缺点是当一个线程阻塞时,其他所有线程都可能被阻塞(这取决于具体的实现和调度策略)。 需要注意的是,现代操作系统中还可能存在将内核支持线程和
用户级线程结合起来的组合方式线程,以充分利用两者的优点。这种组合方式线程可能包括多对一模型、一对一模型和多对多模型等不同的实现方式。