线程模型

为什么用户线程需要对应的内核线程? 
在可抢占内核里面-----线程使用系统调用,进入内核执行,如果这时发生线程切换,我们必须记录下当前的内核堆栈情况.  这样可以保证每个用户态线程独立的使用内核功能(使用系统调用).

 

内核线程 

内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核(Multi-Threads kernel )

轻量级进程 

轻量级进程(LWP)是一种实现多任务的方法。与普通进程相比,LWP与其他进程共享所有(或大部分)它的逻辑地址空间和系统资源;与线程相比,LWP有它自己的进程标识符,优先级,状态,以及栈和局部存储区,并和其他进程有着父子关系;线程既可由应用程序管理,又可由内核管理,而LWP只能由内核管理并像普通进程一样被调度。

LWP与普通进程的区别也在于它只有一个最小的执行上下文和调度程序所需的统计信息,这也是它之所以被称为轻量级的原因;一个进程代表程序的一个实例,而LWP代表程序的执行线程(其实,在内核不支持线程的时候,LWP可以很方便地提供线程的实现)。因为一个执行线程不像进程那样需要那么多状态信息,所以LWP也不带有这样的信息。 LWP的一个重要作用是提供了一个用户级线程实现的中间系统。LWP可以通过系统调用获得内核提供的服务,因此,当一个用户级线程运行时,只需要将它连接到一个LWP上便可以具有内核支持线程的所有属性。

 

 用户级线程:通过进程地址空间的线程库实现,这些线程对操作系统是透明的。用户级线程(ULT)是进程内部用户创建的执行单元。线程库提供对线程创建、调度和管理的支持而无需内核支持。由于内核并不知道用户级的线程,所以所有创建和调度是在用户空间内进行的,而无需内核干预。因此,用户级线程通常能快速地创建和管理;

 轻量级进程:轻量级进程(LWP)可以被看做是用户级线程和内核线程的一种映射。每一个轻量级进程支持用户级线程,并映射到一个内核线程上。轻量级线程由内核独立调度,能够在多处理器中并发执行。

 内核线程:这些线程是基本的实体,可以在系统处理器上调度和分发运行。

所谓透明,是指对使用者来说是未知的。 

原文地址:https://www.cnblogs.com/diyingyun/p/2272280.html