概念:
内核线程:内核线程使用内核栈和进程上下文切换的寄存器,只能运行在内核态
用户线程:完全不受内核态影响,线程的创建、同步、调度、销毁都是由用户空间所决定的,也因此这种极其低消耗和高效的
此外还有 轻量级线程:建立在内核空间支持内核调度的用户线程,属于内核线程的高度抽象,轻量线程只能由内核来调度,只不过调度方法像普通用户线程,每个轻量级的线程必须关联特定的内核线程,也因此轻量级线程切换的代价和内核线程一致。
区别:
(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。
(2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。
(3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。
(4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。
(5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序
内核线程的优点:
(1)当有多个处理机时,一个进程的多个线程可以同时执行。