轻量级线程(LWP)介绍以及与内核线程、用户线程的区别

1. 轻量级线程


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

    在大多数系统中,LWP与普通进程的区别也在于它只有一个最小的执行上下文和调度程序所需的统计信息,而这也是它之所以被称为轻量级的原因。一般来说,一个进程代表程序的一个实例,而LWP代表程序的执行线程(其实,在内核不支持线程的时候,LWP可以很方便地提供线程的实现)。因为一个执行线程不像进程那样需要那么多状态信息,所以LWP也不带有这样的信息。

    LWP的一个重要作用是提供了一个用户级线程实现的中间系统。LWP可以通过系统调用获得内核提供的服务,因此,当一个用户级线程运行时,只需要将它连接到一个LWP上便可以具有内核支持线程的所有属性。而因为LWP之间共享它们的大部分资源,所以它在某些应用程序就不适用了;这个时候就要使用多个普通的进程了。例如,为了避免内存泄漏和实现特权分隔。使用多个进程也使得应用程序在出现进程池内的进程崩溃或被攻击的情况下变得更加健壮。

    轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程,它是内核线程的高度抽象,每一个轻量级进程都与一个特定的内核线程关联。内核线程只能由内核管理并像普通进程一样被调度。轻量级进程由clone()系统调用创建,参数是CLONE_VM,即与父进程是共享进程地址空间和系统资源。与普通进程区别:LWP只有一个最小的执行上下文和调度程序所需的统计信息。
(1)处理器竞争:因与特定内核线程关联,因此可以在全系统范围内竞争处理器资源。
(2)使用资源:与父进程共享进程地址空间。
(3)调度:像普通进程一样调度。

2. 内核线程

    
    内核线程只运行在内核态,不受用户态上下文的拖累。

(1)处理器竞争:可以在全系统范围内竞争处理器资源。
(2)使用资源:唯一使用的资源是内核栈和上下文切换时保持寄存器的空间。
(3)调度:调度的开销可能和进程自身差不多昂贵。
(4)同步效率:资源的同步和数据共享比整个进程的数据同步和共享要低一些。

3. 用户线程

    
    用户线程是完全建立在用户空间的线程库,用户线程的创建、调度、同步和销毁全又库函数在用户空间完成,不需要内核的帮助。因此这种线程是极其低消耗和高效的。

(1)处理器竞争:单纯的用户线程是建立在用户空间,其对内核是透明的,因此其所属进程单独参与处理器的竞争,而进程的所有线程参与竞争该进程的资源。
(2)使用资源:与所属进程共享进程地址空间和系统资源。
(3)调度:由在用户空间实现的线程库,在所属进程内进行调度。

    本篇文章是以下文章的整合版,可以参考以下链接:
    http://blog.csdn.net/jack05/article/details/5281079
    http://baike.baidu.com/link?url=Zip5vGTm3lmLtwKg02CTNJRrl9gMAmbdjmbY1Njrlbxremnt-bgj2-EWgJ69EBJE7qc3ThUw3qwoKdBezHj6Lq

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux用户线程和内核线程是两种不同的线程实现方式。 用户线程是由用户空间的线程库来实现的,线程的创建、调度、同步等操作都在用户空间中完成,内核并不知道线程的存在,因此线程的切换不需要切换到内核态,具有轻量级、高效率等优点。但是由于用户空间线程库没有访问系统资源的权限,导致线程无法利用多核处理器等硬件资源。 内核线程是由内核来管理的,线程的创建、调度、同步等操作都在内核中完成,内核可以直接访问系统资源,因此线程可以充分利用硬件资源,但是由于线程的切换需要切换到内核态,具有较高的开销,同时线程数量过多也会导致内核资源消耗过大。 在Linux中,用户线程的实现方式主要有两种:基于轻量级进程(LWP)和基于协程。基于轻量级进程的用户线程,是通过在用户空间中创建一组LWP来实现的,每个LWP对应一个内核线程,用户线程之间的切换通过LWP之间的切换来完成。基于协程的用户线程,是通过在用户空间中维护一组协程来实现的,每个协程对应一个用户线程,用户线程之间的切换通过协程之间的切换来完成。 而内核线程的实现方式则是通过内核中的线程调度器来管理线程的运行,线程的创建、调度、同步等操作都在内核中完成,线程之间的切换也是在内核中完成。Linux中的内核线程实现方式主要有两种:基于进程的线程和基于线程的线程。基于进程的线程是指每个线程都对应一个进程,由内核来管理进程和线程之间的关系;基于线程的线程是指多个线程共享一个进程,由内核来管理线程之间的关系。在Linux中,基于线程的线程实现方式更加常见,例如pthread库就是基于线程的线程实现方式来实现多线程编程的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值