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

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

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/sonnet/p/15187554.html
Copyright © 2011-2022 走看看