`

三种线程——内核线程、轻量级进程、用户线程

阅读更多

转载自:http://blog.sina.com.cn/s/blog_446b43c10100cius.html

 

内核线程

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

轻量级进程

轻量级线程 (LWP) 是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有 LWP 。每一个进程有一个或多个 LWPs ,每个 LWP 由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操作系统中, LWP 就是用户线程。

由于每个 LWP 都与一个特定的内核线程关联,因此每个 LWP 都是一个独立的线程调度单元。即使有一个 LWP 在系统调用中阻塞,也不会影响整个进程的执行。

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

用户线程

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

 

 

上图是最初的一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没有直接对用户线程进程调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存在。用户线程之间的调度由在用户空间实现的线程库实现。

这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。

加强版的用户线程——用户线程 +LWP

这种模型对应着恐龙书中多对多模型。用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很廉价,因此可以建立任意多需要的用户线程。操作系统提供了 LWP 作为用户线程和内核线程之间的桥梁。 LWP 还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通过 LWP ,因此进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将建立的用户线程关联到 LWP 上, LWP 与用户线程的数量不一定一致。当内核调度到某个 LWP 上时,此时与该 LWP 关联的用户线程就被执行。

 

  • 大小: 19.9 KB
  • 大小: 7.8 KB
  • 大小: 15.6 KB
分享到:
评论

相关推荐

    Linux下的LWP(轻量级进程)、进程、线程、用户级线程、内核线程

    本文主要讲解了Linux下的LWP(轻量级进程)、进程、线程、用户级线程、内核线程的概念、区别与联系、优缺点、发展等相关内容。本文来自于CSDN,由火龙果软件Linda编辑、推荐。再看正文之前我要先强调一下几点:1....

    疯狂内核之——进程管理子系统

    1.2 Linux的线程——轻量级进程 15 1.3 进程的创建——do_fork()函数详解 19 1.4 执行进程间切换 33 1.4.1 进程切换之前的工作 33 1.4.2 进程切换实务 —— switch_to宏 37 1.4.3 __switch_to函数 39 1.5 fork与...

    进程 线程 轻量级线程1

    线程的执行是由系统内核来管理的,通常被称为内核线程或者k-线程。不同于由操作系统内核调度的线程,轻量级线程由应用级线程调度程序来负责调度。轻量级线程也有它的缺点

    linux多线程及网络编程

    内核线程,在有的系统上称为LWP(Light Weight Process,轻量级线程),运行在内核空间,由内核调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程。...

    Java与线程.pdf

    线程是比进程更轻量级的调度执行单位,它可以将一个进程的资源分配和执行调度分开,既可以共享进程资源,又可以独立调度。线程的实现有两种方式:用户线程和内核线程。 用户线程是在用户态中实现的,不需要内核的...

    哈工大 操作系统 实验8 内核级线程

    11级本人自写的作业, 于实验八截至后第一天上传; 没采用轻量级风格的线程, 而是仿造windows solaris的风格. 应该好使, 欢迎讨论, 联系方式在下载包内.

    Java线程实现与安全

    首先并发并不是我们通常我们认为的必须依靠线程才能实现,但是在Java中并发的实现是离不开线程的,线程的主要实现有三种方式:使用内核线程(KernelThread,KLT)实现使用用户线程实现使用用户线程加轻量级进程混合...

    linux系统编程之线程.zip

    LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 ...

    多线程编程指南

    多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。在系统级别内,程序并排执行,系统分配到每个程序的执行时间是基于该程序的所需时间和其他程序的所需时间来决定的。然而在每个应程序的内部,...

    uThreads:用C ++实现的并发用户级线程库

    用户级线程是轻量级线程,它们在内核线程之上执行以提供并发性和并行性。 内核线程是使用处理器所必需的,但是它们具有以下缺点: 每个挂起/恢复操作都涉及内核上下文切换线程抢占会导致额外的开销线程优先级和高级...

    操作系统答案2.doc

    一般来说,用户线程之间的上下文切换 涉及到用一个用户程序的轻量级进程(LWP)和用另外一个线程来代替。这种行为 通常涉及到寄存器的节约和释放。 4.3在哪些情况下使用多内核线程的多线程方案比单处理器系统的单个...

    一个进程池的服务器程序

    当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。 总的来说,思想是让子进程accept并处理...

    ernest-dzf#docs#线程进程1

    处理器竞争:可以在全系统范围内竞争处理器资源使用资源:唯一使用的资源是内核栈和上下文切换时保持寄存器的空间调度:调度的开销可能和进程自身差不多昂贵轻量级进程轻量

    轻量级MenuetOS

     免费的MENUET就是这么一个简单的Linux内核操作系统。最令人吃惊的是,这个专门安装在一张1.44寸软盘上的操作系统竟然可以实现图形操作界面。这个用汇编语言写成的32位操作系统具有结构清晰、利于编程、快速、稳定...

    深入理解linux内核

    注意为英文版 【目录信息】前言第一章 绪论 Linux与其他类Unix内核的比较 硬件的依赖性 Linux版本 操作系统基本概念 ...Linux中的分页 第三章 进程 进程、轻量级进程和线程 进程描述符 进程切换 创建进程 撤销进程

    2操作系统名词解释.doc

    (P107) (网络:线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针( PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被...

    1操作系统名词解释.doc

    (P107) (网络:线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针( PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被...

    UNIX 高级教程系统技术内幕

    3.3 轻量级进程设计——要考虑的问题 3.3.1 fork 的语义 3.3.2 其他的系统调用 3.3.3 信号传递和处理 3.3.4 可视性 3.3.5 堆栈增长 3.4 用户级线程库 3.4.1 编程接口 3.4.2 线程库的实现 3.5 调度器调用 3.6 Solaris...

    leetcode伪代码-go-anywhere:关于go的代码、文档和想法

    以many-to-many为例,在实现上需要在用户线程和内核线程之间提供称为轻量级进程(lightweight process, LWP)的中间数据结构。 对于用户线程库而言,LWP就像是一个虚拟处理器,应用程序可以在其上调度用户线程运行。每...

Global site tag (gtag.js) - Google Analytics