首页 > 编程知识 正文

用户线程和内核线程的调度都需要经过内核态,JAva用户态和内核态

时间:2023-05-06 12:34:40 阅读:278887 作者:407

JVM线程用户态和内核态 一. 线程用户态和内核态概念 1.1 为什么会有用户态和内核态 由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 :用户态 和 内核态 1.2 用户态和内核态的区别 内核态:CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序用户态:只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取本质区别就是访问内存的限制 二. JVM的线程实现的三种线程模型 使用内核线程实现(1:1实现)使用用户线程实现(1:N)实现使用用户线程加轻量级进程混合实现具体如何实现的可以看这篇博客:
https://www.cnblogs.com/jimoer/p/13283355.html我的简单理解就是java线程需要映射到操作系统中的轻量级进程中,那么如何映射以及映射的级别和映射的方式(多对多,一对多,一对一)都是有区别的 三. JVM线程是用户态还是内核态 java线程在jdk1.2之前,是基于成为“绿色线程”的用户线程实现的,而在jdk1.2中线程模型替换为基于操作系统原生线程模型来实现。因此在目前的jdk版本中,操作系统支持怎样的线程模型,很大程度上决定了java虚拟机的线程是怎样映射的,这点在不同的平台上都没有办法达成一致。总的来说就是,虚拟机规范中并没有限定java线程需要使用哪种线程模型,要根据不同的平台来说,但是无论使用哪种线程模型,java程序的编码和运行都是没有差异的。对于Sun JDK来说,它的windows版和linux版都是使用一对一的线程模型实现的,一条java线程就映射到一条轻量级进程中,因为windows和linux系统提供的线程模型就是一对一的对于Solaris平台中,由于操作系统同时支持一对一和多对多的线程模型,因此其jdk提供了参数选择哪种线程模型

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。