【转】linux 用户线程、LWP、内核线程学习笔记

【好文转发---linux 用户线程、LWP、内核线程学习笔记】html

在现代操做系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体能够分为两大部分:线程集合资源集。进程中的线程是动态的对象;表明了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。 线程有本身的私有数据:程序计数器,栈空间以及寄存器。 Why Thread?(传统单线程进程的缺点) 1. 现实中有不少须要并发处理的任务,如数据库的服务器端、网络服务器、大容量计算等。 2. 传统的UNIX进程是单线程的,单线程意味着程序必须是顺序执行,不能并发;既在一个时刻只能运行在一个处理器上,所以不能充分利用多处理器框架的计算机。 3. 若是采用多进程的方法,则有以下问题: a. fork一个子进程的消耗是很大的,fork是一个昂贵的系统调用,即便使用现代的写时复制(copy-on-write)技术。 b. 各个进程拥有本身独立的地址空间,进程间的协做须要复杂的IPC技术,如消息传递和共享内存等。 多线程的优缺点 多线程的优势和缺点其实是对立统一的。 支持多线程的程序(进程)能够取得真正的并行(parallelism),且因为共享进程的代码和全局数据,故线程间的通讯是方便的。它的缺点也是因为线程共享进程的地址空间,所以可能会致使竞争,所以对某一块有多个线程要访问的数据须要一些同步技术。 三种线程——内核线程、轻量级进程、用户线程 内核线程 内核线程就是内核的分身,一个分身能够处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,惟一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫作多线程内核(Multi-Threads kernel )。 轻量级进程[*] 轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,所以只有先支持内核线程,才能有LWP。每个进程有一个或多个LWPs,每一个LWP由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操做系统中,LWP就是用户线程。 因为每一个LWP都与一个特定的内核线程关联,所以每一个LWP都是一个独立的线程调度单元。即便有一个LWP在系统调用中阻塞,也不会影响整个进程的执行。 轻量级进程具备局限性。首先,大多数LWP的操做,如创建、析构以及同步,都须要进行系统调用。系统调用的代价相对较高:须要在user mode和kernel mode中切换。其次,每一个LWP都须要有一个内核线程支持,所以LWP要消耗内核资源(内核线程的栈空间)。所以一个系统不能支持大量的LWP。 LWP.JPG 注: 1. LWP的术语是借自于SVR4/MP和Solaris 2.x。 2. 有些系统将LWP称为虚拟处理器。 3. 将之称为轻量级进程的缘由多是:在内核线程的支持下,LWP是独立的调度单元,就像普通的进程同样。因此LWP的最大特色仍是每一个LWP都有一个内核线程支持。 用户线程 LWP虽然本质上属于用户线程,但LWP线程库是创建在内核之上的,LWP的许多操做都要进行系统调用,所以效率不高。而这里的用户线程指的是彻底创建在用户空间的线程库,用户线程的创建,同步,销毁,调度彻底在用户空间完成,不须要内核的帮助。所以这种线程的操做是极其快速的且低消耗的。 Uthread1.JPG 上图是最初的一个用户线程模型,从中能够看出,进程中包含线程,用户线程在用户空间中实现,内核并无直接对用户线程进程调度,内核的调度对象和传统进程同样,仍是进程自己,内核并不知道用户线程的存在。用户线程之间的调度由在用户空间实现的线程库实现。 这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程若是阻塞在系统调用中,则整个进程都将会阻塞。 增强版的用户线程——用户线程+LWP 这种模型对应着恐龙书中多对多模型。用户线程库仍是彻底创建在用户空间中,所以用户线程的操做仍是很廉价,所以能够创建任意多须要的用户线程。操做系统提供了LWP做为用户线程和内核线程之间的桥梁。LWP仍是和前面提到的同样,具备内核线程支持,是内核的调度单元,而且用户线程的系统调用要经过LWP,所以进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将创建的用户线程关联到LWP上,LWP与用户线程的数量不必定一致。当内核调度到某个LWP上时,此时与该LWP关联的用户线程就被执行。 Uthread2.JPG 小结: 不少文献中都认为轻量级进程就是线程,实际上这种说法并不彻底正确,从前面的分析中能够看到,只有在用户线程彻底由轻量级进程构成时,才能够说轻量级进程就是线程。linux

原文地址:http://www.cnitblog.com/tarius.wu/articles/2277.html数据库

相关文章
相关标签/搜索