没有合适的资源?快使用搜索试试~ 我知道了~
linux线程的实现 - aitao - 博客园1
需积分: 0 0 下载量 174 浏览量
2022-08-03
15:02:01
上传
评论
收藏 1.23MB PDF 举报
温馨提示
试读
3页
2. gdb 调试多线程 4. 三年回首:C基础 6. strsep和strtok_r替代strtok 7. 缓存穿透和缓存失效 8. mmap为什么比read
资源详情
资源评论
资源推荐
2018/2/22
linux线程的实现 - aitao - 博客园
https://www.cnblogs.com/zhaoyl/p/3620204.html 1/4
linux线程的实现
首先从OS设计原理上阐明三种线程:内核线程、轻量级进程、用户线程
内核线程
内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核
线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫
做多线程内核(Multi-Threads kernel )。
轻量级进程
轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线
程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。这种模型实际上就是恐
龙书上所提到的一对一线程模型。在这种实现的操作系统中,LWP就是用户线程。
由于每个LWP都与一个特定的内核线程关联,因此每个LWP都是一个独立的线程调度单元。即使有一个
LWP在系统调用中阻塞,也不会影响整个进程的执行。
轻量级进程具有局限性。首先,大多数LWP的操作,如建立、析构以及同步,都需要进行系统调用。系统调
用的代价相对较高:需要在user mode和kernel mode中切换。其次,每个LWP都需要有一个内核线程支
持,因此LWP要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的LWP。
注:
LWP的术语是借自于SVR4/MP和Solaris 2.x。有些系统将LWP称为虚拟处理器。而将之称为轻量级进程
的原因可能是:在内核线程的支持下,LWP是独立的调度单元,就像普通的进程一样。所以LWP的最大
特点还是每个LWP都有一个内核线程支持。
用户线程
LWP虽然本质上属于用户线程,但LWP线程库是建立在内核之上的,LWP的许多操作都要进行系统调用,
因此效率不高。而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调
度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。
上图是最初的一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没
有直接对用户线程进程调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存
在。用户线程之间的调度由在用户空间实现的线程库实现。
这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程如果阻塞在系统调用中,则整个进
程都将会阻塞。
加强版的用户线程——用户线程+LWP
这种模型对应着恐龙书中多对多模型。用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很
廉价,因此可以建立任意多需要的用户线程。操作系统提供了LWP作为用户线程和内核线程之间的桥
梁。LWP还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通
过LWP,因此进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将建立的用户线程关联
最新随笔
最新随笔
1. socket泄露的问题
2. gdb 调试多线程
3. MMAP和DIRECT IO区别
4. 三年回首:C基础
5. 定时器管理:nginx的红黑树和libevent
的堆
6. strsep和strtok_r替代strtok
7. 缓存穿透和缓存失效
8. mmap为什么比read/write快(兼论buffe
rcache和pagecache)
9. B+Tree和MySQL索引分析
10. c++拷贝构造和编译优化
我的标签
我的标签
linux(9)
c/c++(8)
data structure(7)
tcp/ip(7)
operating system(4)
databse(4)
Optimization(3)
interview(3)
algorithm(1)
network programming(1)
更多
积分与排名
积分与排名
积分 - 154272
排名 - 1704
阅读排行榜
阅读排行榜
1. WEB服务器、应用程序服务器、HTTP
服务器区别(56682)
2. shell中exec解析(52635)
3. Linux进程调度原理(38794)
4. Linux内存管理原理(37561)
5. python中的编码问题:以ascii和unico
de为主线(35704)
6. mysql事务和锁InnoDB(31425)
7. JavaScript和JQuery好书推荐(23743)
8. 正确解读free -m(22086)
9. c语言libcurl库的异步用法(20013)
10. VIM插件攻略(19683)
评论排行榜
评论排行榜
1. mysql事务和锁InnoDB(9)
2. 80X86寄存器详解(5)
3. HTTP报文(4)
4. 公司大了怎么办(4)
5. WEB服务器、应用程序服务器、HTTP
服务器区别(3)
6. shell中exec解析(3)
7. Linux内存管理原理(3)
8. 可重入性与线程安全(2)
9. Linux进程调度原理(2)
10. 自白书(2)
Just Love U
學而不思则罔,真理越辯越明
Xhinking
- 粉丝: 24
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0