首页 > 编程知识 正文

内核线程和用户线程的区别,命令接口和程序接口

时间:2023-05-03 06:13:11 阅读:175963 作者:2876

文章: 1.http://wiki.directi.com/display/tu/understandingprocessesinlinux; jession id=154 FB 21140221 C2C 72348 c4e 9b 96249 e

2.http://Linux.chinaitlab.com/kernel/890395.html

首先摘录部分关键点。

内核线程

内核线程是内核的分身,分身可以处理特定的事情。 这在处理异步事件(如异步IO )时特别有用。 内核线程的使用很便宜,使用的资源只有内核堆栈和上下文切换时保存寄存器的区域,没有分配地址空间。

轻量级进程

轻量级线程(LWP )是内核支持的用户线程。 这是基于内核线程的高级抽象,因此只有支持内核线程才能进行LWP。 每个进程都有一个或多个LWPs,每个LWP由一个内核线程支持。

轻量过程是有极限的。 首先,大多数LWP操作(如生成、析构函数和同步)都需要系统调用。 系统调用成本比较高。 您需要在用户模式和kernel模式之间切换。 其次,由于每个LWP都需要内核线程支持,因此LWP会占用内核资源(内核线程的堆栈空间)。 因此,一个系统不能支持大量的LWP。

用户线程

LWP本质上是用户线程,但LWP线程库构建在内核上,LWP的很多操作进行系统调用,因此效率不高。

这里的用户线程是指完全构建在用户空间中的线程库,用户线程的构建、同步、废弃、调度完全在用户空间中进行,不需要内核的帮助。 因此,这种线程的操作极其高速且低消耗。 linux的用户线程构建在posix库中。 其缺点是,如果用户线程被系统调用阻止,则会阻止整个进程。

linux线程的实现:用户线程+LWP

因为用户线程库还完全构建在用户空间中,所以用户线程操作仍然很便宜,可以根据需要构建任意数量的用户线程。 操作系统提供LWP作为用户线程和内核线程之间的桥梁。 如上所述,LWP拥有内核线程的支持,为内核的调度单元,另外,因为用户线程的系统调用通过LWP,进程内的某个用户线程的块不影响整个进程的执行。 用户线程库将已建立的用户线程与LWP相关联。 LWP和用户线程的数量不一定一致。 将内核调度到LWP后,将执行与该LWP关联的用户线程。

个人理解:

传统的linux内核进程与线程的说明书,如《LINUX KERNEL DEVELOPMENT》中简述的多线程与进程的关系,大体上为线程共享所属的进程代码数据库等,其实现在理解起来,这是一种单方面的说法因为省略LWP这个循环,实际上实现代码数据和地址空间等的共享的不是用户线程,而是与用户线程相对应。 代替用户线程与内核进行交互的LWP、任性的栗子、用户线程完全在用户空间中工作,内核完全不知道用户线程的存在。 因为用户线程在用户状态下完全由进程创建和管理。

“如果一个用户线程被系统调用阻止,则存在整个进程被阻止的缺点。 ”这是因为,在LWP不存在的情况下,kernel不知道用户线程的存在,因此用户线程需要read操作等系统调用,但在内核由于某些原因无法提供暂时读取的数据的情况下,该read系统调用因为kernel只响应进程,所以对内核来说,只能屏蔽发出请求的进程,如果请求的线程通过进程向内核发出系统调用,则进程被屏蔽后,当然除了属于该进程之外

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。