免费注册 查看新帖 |

Chinaunix

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

[进程管理] 内核级线程与用户级线程调度优先级 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-18 14:01 |只看该作者 |倒序浏览
如题,想知道内核级线程和用户级线程在调度时候,哪个优先级高?为什么?
如果不能一概论之的话,需要考虑哪些因素,求解答或推荐资料。
谢谢~

论坛徽章:
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:42 |只看该作者
内核和用户的线程(进程)在调度时都是平等的,谁优先取决于其优先级、调度算法等调度相关的因素。

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


    我现在知道了内核级线程的调度是由内核调度器负责的,而用户级线程的调度是由线程库来支持的,每个进程都可以定制化自己的调度算法。
    但是,关于用户级线程可以采用的调度算法一般有哪些?

论坛徽章:
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
4 [报告]
发表于 2014-02-19 11:20 |只看该作者
不知道你说的“用户级线程”具体是个什么概念?个人理解调度都是由内核调度器负责的,没听说过用户态线程库负责的说法呢?呵呵

论坛徽章:
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
5 [报告]
发表于 2014-02-19 11:24 |只看该作者
本帖最后由 humjb_1983 于 2014-02-19 11:25 编辑
zhangyuxiu 发表于 2014-02-19 10:47
回复 2# humjb_1983

刚看了你发了blog,linux中应该没有你说的“用户级线程”的概念。linux中的线程,就是一个轻量级的进程。

论坛徽章:
0
6 [报告]
发表于 2014-02-19 11:31 |只看该作者
回复 3# zhangyuxiu
你的理解有点偏差,有些概念混淆了,linux内核采用的是1:1核心线程模型,每个用户线程在内核中都有对应的一个task_struct去管理,由内核的调度器进行调度;内核线程与用户线程的区别在于运行级别以及内存空间的不同,在调度层面两者是等价的
建议先看看深入理解linux内核这本书,再结合走读linux内核代码


   

论坛徽章:
0
7 [报告]
发表于 2014-02-20 08:56 |只看该作者
回复 6# junnyg


    看到很多比较用户级线程,用户线程,内核级线程,内核线程的帖子。如:http://bbs.chinaunix.net/thread-3660774-1-1.html
    这些概念已经过时了么?我们现在使用的linux系统,就比如说内核2.6.32等,都已经没有“用户级线程”的概念了么?

论坛徽章:
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
8 [报告]
发表于 2014-02-20 11:26 |只看该作者
各个操作系统的实现不一样,如果要学习linux,建议只看linux相关的实现和内容,否则很容易混淆的。

论坛徽章:
0
9 [报告]
发表于 2014-02-21 10:16 |只看该作者
建議可以先去聊解NPTL跟LinuxThread

大致上來說線程在內核裡面線程依舊被當作是一個歷程,並且依舊利用了clone()系統調用(在NPTL庫裡調用)。然而,NPTL必需內核級的特異扶持來告終,例如必需掛起然後再喚醒線程的線程同步原語futex.

NPTL也是一個1*1的線程庫,即便說,當你利用pthread_create()調用創立一個線程後,在內核裡就相應創立了一個調動實體,在linux裡即便一個新曆程,這個措施最大可能的簡化了線程的告終。

论坛徽章:
0
10 [报告]
发表于 2014-02-21 11:02 |只看该作者
回复 9# wth0722


    恩,我阅读了NPTL与Linux Thread的相关知识,现在看到网上的评论,有一点无法确定谁对谁错的:
   
    主要是关于Linux下的Linux Threads到底有没有这样的缺点:一个进程中的某个线程阻塞,会引起整个进程阻塞?


    第一种说法:“ 早期的LinuxThread就是用户级线程,全部实现在用户空间中,kernel不参与调度。主要问题是一个用户级线程如果被阻塞,整个进程都会被阻塞,而且没有办法让一个进程里面的多个线程运行在多处理器上。需要内核支持调度的线程的话,就是目前Linux使用的线程,NPTL,线程调度需要kernel来进行的,这样就解决了用户级线程的问题了。”


    第二种说法:线程模型有三种,N:1线程模型,1:1线程模型和N:M的线程模型。N∶1用户线程模型:N条用户线程只由一条内核进程/线程调度。内核不干涉线程的任何生命活动,用户态线程工作在“进程竞争范围”。因此,线程的创建、删除和环境切换都很高效。但是缺点同样明显,因为一个进程同一时间只能在一个CPU中执行。所以在SMP中,无论系统有多少CPU,同一进程中的所有线程都只能由一个CPU去执行。另外,如果其中某条线程执行了一个“阻塞”操作,比如read和write,那么整个进程中的其它线程都会被阻塞,这也违背了线程的概念。目前,采用这种模型的线程库大概有,FreeBSD下的libc_r。
    1∶1 核心线程模型:1条用户线程对应一条内核进程/线程来调度,即以核心态线程实现。应用程序创建的每一个线程都由一个核心线程直接管理,内核将每一个核心线程都调度到系统CPU上。所有线程都工作在“系统竞争范围”。这种方式也是现在大多线程库采用的模式。它完全克服了N:1模型的缺点,但较之在线程的创建、删除、切换的代价更昂贵。目前,采用这种模型的线程库大概有,FreeBSD下的libthr,Linux下的LinuxThreads,NPTL。”
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP