美文网首页
操作系统及JVM线程模型对应

操作系统及JVM线程模型对应

作者: JaxMa | 来源:发表于2019-08-03 11:17 被阅读0次

    操作系统及JVM线程模型对应

    操作系统线程模型

    在Linux中定义了三种的线程模型,分别是核心线程,LWP, 用户线程。

    内核线程

    内核线程是操作系统提供运行于内核态的线程,该线程的所有管理工作都是由操作系统来完成的。 当运行的线程阻塞时,操作系统可以立刻的调度其他线程运行。但是他也有响应的缺点:就是内核线程总是在内核进行调度管理的,但是用户进程是在用户态下的。因此使用内核线程会涉及到一个用户态和内核态间的切换

    用户线程

    用户线程的定义是,由进程内部自己创建管理,对操作系统不可见的线程,它存在的意义是可以进程自己创建销毁线程,成本相对的比较低。 但是其弊端就是对用户开发要求比较高,同时当用户线程遇到阻塞时其他的用户线程将没有办法启动(因为对操作系统来说,该进程对应的是一条系统线程,系统线程阻塞所以被挂起)

    LWP

    介于以上的两种线程模型的优点及弊端,所以有了LWP(light weight proccess)运行在用户空间的轻量级进程。每一个LWP对应一个的内核线程,所以LWP的调度等控制都有内核管理。同时提供了线程库供以用户进程使用。

    在简单了解了以上的三种线程模型,尤其是LWP 之后,将讲讲hotSpot中的线程模型

    JVM(HotSpot)线程原理

    JVM其实本身也是一个进程而已,只是内部实现了部分操作系统的逻辑,比如对用户内存空间的管理,线程的映射维护等

    HotSpot的线程模型

    在HotSpot中的线程模型使用的是一个线程实例(java.lang.Thread)对应一个操作系统线程(这里的对应的是LWP)。当一个线程实例开始执行start()的时候的时候就会创建一个LWP进行对应,并且在线程任务结束后回收,其中线程的调度由操作系统负责。

    JVM在线程创建并执行start()方法后的内部动作:

    1、创建一个堆中的Thread对象(java.lang.Thread)

    2、在JVM内部会创建一个JavaThread对象(JVM内部的,以下称VmThread),用以维护线程当前的状态。同时VmThread会持有java.lang.Thread 的引用及与操作系统对用的OSThread的引用

    3、JVM内部会维护一个OSThread,包含操作系统信息,及与实际操作系统线程对应的handle。

    相关文章

      网友评论

          本文标题:操作系统及JVM线程模型对应

          本文链接:https://www.haomeiwen.com/subject/cpoylctx.html