zoukankan      html  css  js  c++  java
  • Linux内核下的 内核线程,用户线程, 纤程LWP辨析

    内核线程 用户线程 轻量级进程LWP

    Linux下只有一种类型的进程,那就是task_struct, 进而linux也无线程概念, 只是将那些与其他进程共享资源的的进程称之为綫程.

    一個進程由於其運行的空間的不同,從而分爲 内核綫程用戶進程, 通過共享資源實現的一組進程我們稱之爲進程組.

    内核綫程

    内核綫程運行在内核態, 唯一使用的资源是内核栈和上下文切换时保存的寄存器空间.

    • 处理器: 可以再全系统范围内竞争处理器资源
    • 使用资源: 唯一使用的资源是内核栈和寄存器
    • 调度: 和进程差不多
    • 同步效率: 比进程低

    輕量級進程

    轻量级进程LWP是建立在内核之上并由内核支持的用户线程, 他是内核线程的高度抽象, 每一个
    轻量级进程都与一个特定的内核线程相关联.
    轻量级进程由clone()系统调用创建, 参数是CLONE_VM, 即与父进程是共享进程地址空间和系统资源
    区别: LWP只有一个最小的执行上下文和调度程序所需的统计信息.

    • 处理器竞争:因与特定内核线程关联,因此可以在全系统范围内竞争处理器资源
    • 使用资源:与父进程共享进程地址空间
    • 调度:像普通进程一样调度
      轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操作系统中,LWP就是用户线程。

    轻量级进程具有局限性。

    • 首先,大多数LWP的操作,如建立、析构以及同步,都需要进行系统调用。系统调用的代价相对较高:需要在user mode和kernel mode中切换。
    • 其次,每个LWP都需要有一个内核线程支持,因此LWP要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的LWP。

    用戶綫程

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

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

    LWP虽然本质上属于用户线程,但LWP线程库是建立在内核之上的,LWP的许多操作都要进行系统调用,因此效率不高。而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。

    References

    荊軻飲燕市, 酒酣氣益盛.

  • 相关阅读:
    我们在期待什么?
    ASP.NET的本质–IIS以及进程模式
    javascript开发中要注意的事情
    通过配置web.config发电子邮件详解
    VS2005 中文版下载
    td自动换行CSS
    巧妙利用图片IMG的onerror事件
    网页 页面不缓存
    JS检测对像(支持多版本)
    利用js预缓存图片
  • 原文地址:https://www.cnblogs.com/sonnet/p/15187554.html
Copyright © 2011-2022 走看看