Chinaunix

标题: 用户级线程 用在什么地方 [打印本页]

作者: zhangyuxiu    时间: 2014-02-18 11:52
标题: 用户级线程 用在什么地方
如题,现在的linux操作系统具有用户级线程,由用户库管理每一个进程的多个线程之间的创建,撤销等。内核只能看到一个进程,看不到该进程下的多个线程。

通常我们理解的,linux的线程并发执行,是说对于一个进程的多个线程也是可以并发的。

想问一下,由用户库管理的,一个时刻只能有该进程的一个线程执行;一个线程阻塞,该进程的所有线程都阻塞。这样的用户级线程,用在什么情况下啊?
作者: humjb_1983    时间: 2014-02-19 08:46
这样的说法有点奇怪~~
“内核只能看到一个进程,看不到该进程下的多个线程。”---这个不会吧?

“由用户库管理的,一个时刻只能有该进程的一个线程执行;一个线程阻塞,该进程的所有线程都阻塞。”--这个也不一定吧,难道这个“用户级线程”跟我们理解的普通线程不一样?

作者: mordorwww    时间: 2014-02-19 09:25
本帖最后由 mordorwww 于 2014-02-19 09:39 编辑

什么叫用户级线程,

按照楼主所说的,那应该就是用户态来调度的线程,也就是不支持抢占式调度(包括不支持时间片到期抢占)的线程,也就是说如果一个线程不主动sleep或者exit,该进程上的其它running线程永远都不能运行


在c语言中貌似是用setjmp setlongjmp之类的来进行线程主动调度的


当然了,如果你把定时器、IO等中断和事件也引入到你的用户级线程管理系统里,那也可以做到和内核级线程一样了,只是不知道这样做有好处没
作者: zhangyuxiu    时间: 2014-02-19 10:44
回复 2# humjb_1983


    可以参考下这个链接的前几段:
http://blog.sina.com.cn/s/blog_5623cddb0100d15g.html
作者: zhangyuxiu    时间: 2014-02-19 10:45
回复 3# mordorwww


    用户级线程的调度算法有哪些呢?
作者: gaojl0728    时间: 2014-02-19 11:11
回复 1# zhangyuxiu


    你说的都是很老很老的早期实现了, 现代的linux都用NPTL, 所有的线程都是内核管理调度的。每一个线程都对应内核的一个task_struct, task_struct是内核调度的基本单位。
作者: humjb_1983    时间: 2014-02-19 11:24
zhangyuxiu 发表于 2014-02-19 10:44
回复 2# humjb_1983

呵呵,你说的这个“用户级线程”在linux中应该是不支持的。这个blog中也说了:“Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程”
作者: arm-linux-gcc    时间: 2014-02-19 13:14
本帖最后由 arm-linux-gcc 于 2014-02-19 16:36 编辑

2.6的内核就支持线程了,实现是NPTL
LZ的那种说法是2.4的,实现是linuxthread,早就被淘汰了

建议看看NPTL和linuxthread区别的相关资料


作者: asuka2001    时间: 2014-02-19 13:43
LZ说的用户级线程好像跟线程不是一回事吧!

用户级线程给我的感觉更像 coroutine,green thread。比如 python中 eventlet的应用。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2