Linux 版 (精华区)
发信人: tcpip (偶的昵称改了), 信区: Linux
标 题: 内核级线程 ,轻进程与用户级线程
发信站: 哈工大紫丁香 (Fri Jan 7 20:05:38 2000), 转信
发信人: xh (江南白衣), 信区: Unix
标 题: 内核级线程 ,轻进程与用户级线程
发信站: 华南网木棉站 (Fri Jan 7 09:28:17 2000), 转信
内核级进程运行在kernel space,对用户不可见,所以我们今天
讨论的是LWP(轻量级进程)和用户级线程,Solaris的thread库和POSIX
的pthread库。其实说白了只有一句话,在本文的末尾。
1.LWP:
每个LWP都是绑定在一个内核级线程上的。因此,对LWP的支
持就要对内核线程的支持。
LWP的创建,撤销,同步都需要系统调用,往返于用户态和内
核态之间。同时,LWP花费相当多的内核资源,包括内核堆栈的物
理内存。因此,LWP的开销相对较大,在系统里不能支持太多的LWP
2.用户级线程:
用户级线程对内核是不可见的,由线程库充当微内核负责
调度。优点是快而灵活,缺点是因为内核完全不知道线程的存在,
同时带来了很多困难。
所以,理想的模型是内核负责调度管理少量的LWP,而多数的用户
线程复用少数的LWP,(就是说,非绑定的用户线程,与LWP是多对一
的关系),由线程库进行调度。
3.Solaris支持全部的内核级线程,LWP和用户级线程。
因此,其线程库libthread(函数名称为thr_xxx)在缺省情况下,
将为一个进程创建一个LWP池,LWP的数量取决于处理器数目和用
户线程数目,也可以由程序员用thr_setconcurrency()进行设定。
然后,在此之上复用所有的用户线程。(如果有池的概念的话应
该不难理解,就是用少量的LWP驱动大量的用户线程)
同时,程序员也可以为某一特定线程绑定一个LWP.(绑定的线程)
4.Posix的pthead库
函数名为(pthread_xxx)。不支持内核线程的FreeBSD也对它作了支持。
据CPU所说,跟Solaris的thread库差不多 .而且支持的系统也较多。
据查,其同样有thread_setconcurrency()函数可以设定LWP的数目。
总结,作为程序员,LWP也好,用户级线程也好,我们最关心的是如何
编写自己的多线程Program.在Solaris下,跟我们打交道的仍然是
用户级线程(LWP已经被线程库封装和隐藏起来)。但是,我们
可以通过线程库的函数设置和管理底层的LWP来优化我们的Program.
这就是我们的编程模式,也是本篇的重点:
对用户级线程进行编程,对LWP进行设定。
--
V2 Studio Xh2000
※ 修改:.xh 于 Jan 7 12:34:01 修改本文.[FROM: 202.38.248.62]
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.248.62]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.118.239.10]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.344毫秒