免费注册 查看新帖 |

Chinaunix

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

[进程管理] 用户级线程 用在什么地方 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-18 11:52 |只看该作者 |倒序浏览
如题,现在的linux操作系统具有用户级线程,由用户库管理每一个进程的多个线程之间的创建,撤销等。内核只能看到一个进程,看不到该进程下的多个线程。

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

想问一下,由用户库管理的,一个时刻只能有该进程的一个线程执行;一个线程阻塞,该进程的所有线程都阻塞。这样的用户级线程,用在什么情况下啊?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-02-19 08:46 |只看该作者
这样的说法有点奇怪~~
“内核只能看到一个进程,看不到该进程下的多个线程。”---这个不会吧?

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

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2014-02-19 09:25 |只看该作者
本帖最后由 mordorwww 于 2014-02-19 09:39 编辑

什么叫用户级线程,

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


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


当然了,如果你把定时器、IO等中断和事件也引入到你的用户级线程管理系统里,那也可以做到和内核级线程一样了,只是不知道这样做有好处没

论坛徽章:
0
4 [报告]
发表于 2014-02-19 10:44 |只看该作者
回复 2# humjb_1983


    可以参考下这个链接的前几段:
http://blog.sina.com.cn/s/blog_5623cddb0100d15g.html

论坛徽章:
0
5 [报告]
发表于 2014-02-19 10:45 |只看该作者
回复 3# mordorwww


    用户级线程的调度算法有哪些呢?

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
6 [报告]
发表于 2014-02-19 11:11 |只看该作者
回复 1# zhangyuxiu


    你说的都是很老很老的早期实现了, 现代的linux都用NPTL, 所有的线程都是内核管理调度的。每一个线程都对应内核的一个task_struct, task_struct是内核调度的基本单位。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2014-02-19 11:24 |只看该作者
zhangyuxiu 发表于 2014-02-19 10:44
回复 2# humjb_1983

呵呵,你说的这个“用户级线程”在linux中应该是不支持的。这个blog中也说了:“Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程”

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-02-19 13:14 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-02-19 16:36 编辑

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

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

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
9 [报告]
发表于 2014-02-19 13:43 |只看该作者
LZ说的用户级线程好像跟线程不是一回事吧!

用户级线程给我的感觉更像 coroutine,green thread。比如 python中 eventlet的应用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP