免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1686 | 回复: 4
打印 上一主题 下一主题

关于linux 线程的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-30 14:29 |只看该作者 |倒序浏览
关于linux 线程的疑问


说linux内核把线程当成进程来调度.
既然这样,不明白为什么使用线程, 就能减少进程调度开销?

[ 本帖最后由 奇门遁甲-lu 于 2009-4-30 15:47 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-30 22:14 |只看该作者
线程通向进程的资源。
内存开销小。
至于调度的开销,其实你可以看一下linux的调度粒度都是进程。
linux已经不太区分进程和线程了

论坛徽章:
0
3 [报告]
发表于 2009-05-01 13:46 |只看该作者

回复 #1 奇门遁甲-lu 的帖子

调度开销在一定程度上还是会减小的吧~
如果使用进程, mm一般是不会共享的, 在切换的时候, mm需要切换, 页表就被重置了...
而如果是线程, 一组线程总是使用相同的mm, 当调度发生在这一组线程之间时, mm就不需要切换, 页表就不需要变.

我不知道具体页表切换会造成多大的时间上的开销. 但是可以这样想一想(以下是个人理解啦~), 内存分页机制为什么能成立? 其中一个原因就是有TLB的存在. 如果没有TLB, 那么一次内存访问, 在分页机制下, 实际上将造成若干次内存访问(因为每查一级页表就要访问一次内存). 这样的话, 使用分页和不使用分页相比, 性能相差就太大了(页表有n级, 内存访问次数就增加n倍). 这样的情况下, 分页机制没有什么优势可言. 而有了TLB(TLB的访问速度应该是要比内存高一个数量级吧), 页表放在TLB中, 使用分页与不使用分页相比, 性能也差不太多, 于是其他方面的优势才得以体现...

所以说, 在分页机制下, TLB很重要. 而进程切换将导致TLB失效. 所以... 用线程还是很好的吧

当然, 上面说的这些在没有MMU的情况下不成立.

论坛徽章:
0
4 [报告]
发表于 2009-05-02 01:02 |只看该作者

回楼上

你说 “当调度发生在这一组线程之间时, mm就不需要切换, 页表就不需要变”



我迷惑在于:
系统中往往既有很多线程和又有很多进程
例如有进程A,B,C,D, 进程A又有线程t1,t2,t3;
那么从t1切换到t2到t3到t4,mm不需要切换;
但 假如调度的情景如下(难道不可能这样?)
A-->B-->t1-->C-->t2--D-->t3

上面每一次调度都要换页表;
我一直想,内核是不是把一组线程t1,t2,t3连续调度呢?调度的代码太复杂,看得晕。很迷惑.

[ 本帖最后由 奇门遁甲-lu 于 2009-5-2 01:04 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-05-02 01:47 |只看该作者
我猜:
LINUX是不分进程和线程的. 不过有些进程可以共享同一个地址空间.等价于WINDOWS上的线程.
LINUX调度的时候是根据进程来调度的.
调度的时候,下一个要执行的进程是有很多条件的,比如可以RUN,优先级等.如果其他条件限制住出现LS上的情况,那么只能这样调度了. 如果其他条件没这这些限制, LINUX是否会把一堆同样的进程一起跑么? 我就不知道了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP