实现线程主要有三种方式:使用内核线程实现(1:1实现),使用用户线程实现(1:N实现),使用用户线程加轻量级进程混合实现(N:M实现)
1、内核线程实现
使用内核线程实现的方式也称为1:1实现。内核线程(kernel-Level Thread,KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操纵【调度器】(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。
而程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口:轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上说的线程。由于每个轻量级进程都需要一个内核线程支持,就构成一对一的线程模型。
由于内核线程的支持,每个轻量级进程都成为一个独立的调度单元,即使其中某一个轻量级进程在系统调用中被阻塞了,也不会影响进程的运行。
但由于是基于内核线程实现的,所以各种线程操作都需要进行系统调用,而系统调用的代价较高,需要在用户态和内核态之间来回切换。其次,每个轻量级进程是由内核线程支持的,需要消耗一定的内核资源。
2、用户线程实现
使用用户线程实现的方式被称为1: