免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
2 [报告]
发表于 2014-02-19 10:47 |显示全部楼层
回复 2# humjb_1983


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

论坛徽章:
0
3 [报告]
发表于 2014-02-20 08:56 |显示全部楼层
回复 6# junnyg


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

论坛徽章:
0
4 [报告]
发表于 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