【内核支持线程】
在内核的支持下实现,即每个线程的线程控制块设置在内核中,所有对线程的操作(如创建、撤销和切换等),都是通过系统功能调用由内核中完成。
内核根据线程控制块感知线程的存在。
内核支持线程主要优点:
(1)在多处理器系统中,内核能够同时调度同一进程中的多个线程并行执行。
(2)如果一个内核中的一个线程被阻塞了,内核可以调度该进程中的其它线程运行,也可以运行其它进程中的线程。
(3)内核支持线程具有很小的数据结构和堆栈,线程切换比较快,切换开销小
(4)内核本身采用多线程技术,提高系统的执行速度和效率
【用户级线程】
仅存在于用户空间中,即每个线程的控制块设置在用户空间中,所有对线程的操作也在用户空间中完成,而无需内核的帮助。
两者比较:
【内核支持】
用户级线程可在一个不支持线程的OS中实现,而内核支持线程则需要得到OS内核的支持
【处理器的分配】
在多处理机的环境下,对纯粹的用户级线程来说,内核一次只为一个进程分配一个处理器,即进程无法享用多处理机带来的好处;
在设置由内核支持线程时,内核可调度一个应用中的多个线程同时在多个处理器上并行运行,从而提高程序的运行速度和效率。
【调度】
对设置有内核支持线程的系统,内核的调度方式和算法于进程调度十分相似,只不过调度的单位是线程,而对只设置了用户级线程的系统,内核的调度单位则仍是进程
【线程执行时间】
当一进程得到CPU时,隶属于该进程的多个线程可通过用户态的线程调度分享内核分配给进程的CPU时间。
在条件相同的情况下,内核支持线程通常比用户支持线程得到更多的CPU执行时间。
【切换速度】
用户级线程的切换,通常发生在一个应用程序的线程之间,由于需要陷入内核,而且切换的规则也相当简单,因此切换的速度比内核支持线程至少快一个数量级。
【系统调用】
用户级线程执行系统调用时,被阻塞的是整个进程。
一个内核支持线程执行系统调用时,内核只阻塞这个线程,但仍可调用其所属进程的其他线程执行。