当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

java 虚拟机线程与操作系统内核线程之间的关系

发表于: 2014-09-23   作者:annan211   来源:转载   浏览次数:
摘要: java jdk 中 线程操作与虚拟机中线程操作之间的关系映射   在多cpu处理器中,一个cpu 可以映射多个 KLT指令集,一个KLT 又可以映射多个轻量级线程LWP,这里的 cpu  KLT  LWP 都是系统级的成员,一个轻量级线程 又对应着多个用户线程。   线程的实现方式可以有多种   1 内核线程实现  &n
java jdk 中 线程操作与虚拟机中线程操作之间的关系映射

  在多cpu处理器中,一个cpu 可以映射多个 KLT指令集,一个KLT 又可以映射多个轻量级线程LWP,这里的 cpu  KLT  LWP 都是系统级的成员,一个轻量级线程 又对应着多个用户线程。
  线程的实现方式可以有多种
  1 内核线程实现

     直接由操作系统内核支持的线程,内核通过操纵调度器来吧任务分配到不同的处理器 上,这种实现方式可以真正意义上的去处理多种任务。程序一般不会去直接使用内核线程,而是去实现内核线程的一种高级接口--轻量级进程LWP,轻量级进程就是我们通常意义上说的线程,只有先去实现内核线程才能实现轻量级进程,轻量级进程和内核线程是1:1 关系的线程模型。
  基于内核线程的支持,每个轻量级进程可以单独成为一个调度单元,即使某个轻量级进程在系统调用中被阻塞了,也不会影响系统的整体工作进程。但是这种实现方式也有巨大的局限性,由于其是基于系统内核线程支持的,所以首先他的数量是有限的,对于处理需要大量线程处理的任务是无法实现的,其次 线程的创建 析构 同步 等操作都要涉及 系统内核线程的内核态和用户态的切换,对于资源的消耗无疑是巨大的。

  2 用户线程实现
     用户线程的实现,是指 线程的创建 调度 和销毁都是在用户态中完成,无需内核知道,
这种实现方式 可以非常快速而且低耗,很多数据库线程就是基于用户线程实现的。
其优势在于不需要基于系统内核线程,劣势也在于其不是基于系统内核线程的,系统内核线程只是把资源分配到进程这一级,所以对于死锁  资源阻塞  如何分配任务给其他处理器 等处理是非常困难的甚至是无法完成的。所以很多种语言放弃了这种实现方式。

  3 混合实现
     Solaries 系统是基于unix 实现的,她的多线程实现是基于 既有内核线程的实现也含有用户线程,用户线程的 创建 析构 销毁 还是在用户态,仍然可以支持大规模的用户线程并发,操作系统提供的轻量级进程 为 用户线程和 内核线程 之间架起了一座桥梁,为处理器映射提供了条件,由于轻量级线程的使用,使得用户线程的调用可以在轻量级线程内完成,所以很大程度的避免了阻塞。

  4 java 线程的实现
 
   java 的线程模型 很大程度上是基于操作系统的线程模型实现的。不同的平台可能会有很大的不同,虚拟机规范中也并没有规定必须基于何种线程模型来实现,对于编码和运行期来说,线程模型是透明的。

java 虚拟机线程与操作系统内核线程之间的关系

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Java线程与Linux内核线程的映射关系 (2013-07-26 12:07:50) 转载▼ <td style="margin: 0px; pad
Java线程与Linux内核线程的映射关系 (2013-07-26 12:07:50) 转载▼ <td style="margin: 0px; pad
http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html Linux从内核2.6开始使用NPTL (Native POSI
task结构 mach层,没有进程概念,只有与进程对应的task mach task可以看作一个机器无关的thread执行
一、如何开始 我的建议是跟随我来完成这个线程分析学习。下面是我们会覆盖到的内容。同时,我会把我
读书看到下面这一段,不太理解,就搜了一下,学了很多东西。 线程的实现可以分为两类:用户级线程(Use
1. 与进程相关有: 存放进程映像的虚拟地址空间 受保护地对处理器,其他进程,文件和I/O资源的访问
查了好多资料,发现还是不全,干脆自己整理吧,至少保障在我的做法正确的,以免误导读者,也是给自
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我
一、什么是线程 线程是指令的执行路径。在Java语言中,线程无处不在,每一个计算机程序最少都有一个
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号