内核线程:线程切换由内核控制,切换的时候,要从用户态进入内核态,切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。

用户级线程:用户态程序自己调度线程切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用smp。目前linux pthread大体是这么做的。

windows我不熟悉,但是感觉在windows下面,thread和process是两种不同的东西,自然是后者包含前者,而且在

内核中,应该也是用两个数据结构来表示的。

在Solaris里面,一个进程包含一个或多个线程,而一个用户线程又对应于轻量级内核进程(LWP),一个LWP又对

应于一个内核线程,在内核里面可以直接调度到线程级别。在Solaris下,这三个东东分别用不同的数据结构来表

示的,详细的可以参考这本书《Solaris内核结构》(第二版)

而在linux下面,线程和进程是平行的,线程不存在单独的数据结构,当创建一个线程的时候,在内核中用的也是

进程的TCB。说的不严密一点,在Linux下可以认为,进程完全是去申请资源的,而实际干活的就是线程了。进程是

地主,家有良田千亩,但是不自己种,而是雇了很多的长工(线程)来干活,长工要是缺什么了,直接去找地要,

地主再出去申请。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐