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毫秒