关于linux进程、lwp、线程的理解
来源:互联网 发布:淘宝 延长付款时间 编辑:程序博客网 时间:2024/06/02 10:03
参考文章:1.http://wiki.directi.com/display/tu/Understanding+Processes+in+Linux;jsessionid=154FB21140221C2C72348C4E9B96249E
2.http://linux.chinaitlab.com/kernel/890395.html
首先摘抄部分重要的要点:
内核线程
内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间,没有分配地址空间。
轻量级进程
轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。
轻量级进程具有局限性。首先,大多数LWP的操作,如建立、析构以及同步,都需要进行系统调用。系统调用的代价相对较高:需要在user mode和kernel mode中切换。其次,每个LWP都需要有一个内核线程支持,因此LWP要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的LWP。
用户线程
LWP虽然本质上属于用户线程,但LWP线程库是建立在内核之上的,LWP的许多操作都要进行系统调用,因此效率不高。 而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。linux的用户线程是建立在posix库上的。缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。
linux线程的实现:用户线程+LWP
用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很廉价,因此可以建立任意多需要的用户线程。操作系统提供了 LWP 作为用户线程和内核线程之间的桥梁。 LWP 还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通过 LWP ,因此进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将建立的用户线程关联到 LWP 上, LWP 与用户线程的数量不一定一致。当内核调度到某个 LWP 上时,此时与该 LWP 关联的用户线程就被执行。
个人理解:
传统的讲解linux内核进程和线程的书,比如《LINUX KERNEL DEVELOPMENT》所简单阐述的关于多线程和进程的关系,大致都为线程共享其所属进程代码数据堆栈等,其实现在理解来看,这只是一种片面的说法,因为省略了LWP这一环,真正实现代码数据和地址空间等共享的并不是用户线程,而是和用户线程对应,代替用户线程与内核交互的LWP,顾名思义,用户线程是完全工作在用户空间的,内核完全不知道用户线程的存在,因为用户线程是在用户态完全由进程所创建和管理的。
“缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。”这句话的理解是:当不存在LWP的时候,因为kernel并不知道用户线程的存在,而如果用户线程需要系统调用,比如read操作,但是由于内核由于某种原因暂时不能提供被读取的数据,那么该read系统调用的不能进行会导致阻塞,但是由于kernel只对进程作出响应,所以对内核而言,唯一能阻塞的对象只能是发出请求的进程,而请求的线程是通过进程向内核提出系统调用的,那么进程阻塞了,当然属于该进程的其他线程同时也会阻塞。
- 关于linux进程、lwp、线程的理解
- Linux进程、线程模型,LWP,pthread_self()
- Linux进程、线程模型,LWP,pthread_self()
- Linux进程、线程模型,LWP,pthread
- Linux进程、线程模型,LWP,pthread_self()
- Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程
- Linux进程创建一——进程、线程、LWP
- Linux线程 之 线程 线程组 进程 轻量级进程(LWP)
- Linux线程 之 线程 线程组 进程 轻量级进程(LWP)
- 进程、轻量级进程(LWP)、线程
- 进程、轻量级进程(LWP)、线程
- 进程、轻量级进程(LWP)、线程
- 进程、线程、轻量级进程(LWP)
- 关于进程与线程的理解
- 关于进程和线程的理解
- 关于进程和线程的一点理解
- 关于 线程 的通俗理解;/单线程 进程
- 【总结】关于LWP的cookie
- MSDN-如何实现研究,并在命名空间扩展中打开
- Linux ALSA 系统架构
- <程序设计实践>一点摘录
- js数字取整
- Android 用Animation-list实现逐帧动画
- 关于linux进程、lwp、线程的理解
- [Android实例] android动画效果切换案例
- [Android实例] Android activity动画跳转案例分析
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- linux 线程安全 mutex 锁的使用
- Android 动画
- ------------------------MSSQL中排列组合的实现------------------------------------
- poj2455 Secret Milking Machine 网络流 最大流 二份答案
- HDU-1242 Rescue