2019独角兽企业重金招聘Python工程师标准>>>

user-level thread,kernel-level thread and hybrid threads

问题起始

早上看一篇"某书"上的一篇博客:说到一应用程序(单个进程)中的线程是无法并行执行的,然后我想到了JVM,难道之前学的多线程并行,并不适用与JVM。艾玛,瞬间内心就开始恐慌了,之前学习GC时的并行收集器咋回事哩,Netty的线程池数最佳设置为服务器内核个数时咋回事哩,于是开始怀疑那篇博客的正确性。
上班的路上开始在一个大神云集的微信群里开始讨论起来,有人不清楚,有人不甚了解,有的大神了解的很透彻,各自都发表着自己的看法,最终定位到了解决这个问题的根源。

拨开云雾见月明

如下是群里比较有价值的聊天记录:

最早 UNIX 的调度是以 “进程” 为最小调度单位,那个时候还没有线程的概念。线程有两种,一种是 “用户态线程” ,对内核不可见,内核不可以调度,现在一般叫做纤程或协程。另一种是 “内核态线程”,由内核调度,也称作轻量进程 LWP 。现在说的线程,一般不特殊指定,都是内核线程。

内核线程可以调度,用户线程不可以,有点懵

kernel thread 可以利用多 CPU , user thread 不能利用多 CPU

JVM是kernel thread

一个操作系统线程对于一个lwp klt

Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应的关系。线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。

KLT即内核线程Kernel Thread,是“内核分身”

每一个KLT对应到进程P中的某一个轻量级进程LWP(也即线程)

下面是到公司后网上查的资料,解决了JVM并行的疑惑

线程有三种实现模型:

  • 用户级或应用程序级线程
  • 内核级线程
  • 用户级和内核级混合线程

图6-1显示了3种线程实现模型。图6-1(a)显示了用户级线程,图6-1(b)显示了内核级线程,图6-1(c)则显示了用户线程和内核线程的混合。

用户级线程

内核级线程:

(c) 混合线程:多对多的关系 图6-1(续)

这些实现之间的较大的区别之一就是它们的模式以及要指派给处理器的线程的能力。这些线程运行在用户模式下或内核模式下。
在用户模式下,进程或线程是执行程序或链接库中的指令,它们不对操作系统内核进行任何调用。
在内核模式下,进程或线程是在进行系统调用,例如访问资源或抛出异常。同时,在内核模式下,进程或线程可以访问在内核空间中定义的对象

总结:

单进程多用户线程可并发不可并行
单进程内核线程可并发可并行

转载于:https://my.oschina.net/LucasZhu/blog/1845133

JVM中线程是否可以并行执行相关推荐

  1. JVM 中的守护线程

    在之前的<详解JVM如何处理异常>提到了守护线程,当时没有详细解释,所以打算放到今天来解释说明一下JVM守护线程的内容. 特点 通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启 ...

  2. 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章?<从内核角度看IO ...

  3. 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    大家好,我是bin,又到了每周我们见面的时刻了,我在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以一个C10k的问题为主线,从内核角度详细阐 ...

  4. 深入学习JVM(中)

    JVM的位置 JVM的体系架构图 类加载器ClassLoader 类的加载.链接和初始化(了解) 加载:查找并加载类的二进制数据 连接: 验证:保证被加载的类的正确性: 准备:给类静态变量分配内存空间 ...

  5. JVM中可生成的最大Thread数量

    最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端.对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个: ...

  6. 详解JVM内存管理与垃圾回收机制3 - JVM中对象的内存布局

    在Java语言层面,可以通过Class类来描述普通的Java类,当JVM创建对象的同时,会生成对应的Class对象,用来描述此对象的大致模型,这也是反射的基础.那么在JVM的内部是如何描述一个普通的对 ...

  7. Java调优之jvm和线程的内存分析

    2019独角兽企业重金招聘Python工程师标准>>> [本文地址] 本文永久地址是:http://www.mzone.cc/article/321.html 这几天因为自己开发的一 ...

  8. 追踪JVM中的本地内存

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 转载自公众号:锅外的大佬 1.概述 有没有想过为什么Java应用程序通过众所周知的-Xms和 ...

  9. java for(o t :object) 获取顺序号_java中线程的生命周期

    线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发. java中Thread的状态 java中Thread有6种状态,分别是: NEW – 新创 ...

最新文章

  1. 【C++】拷贝,赋值与构造
  2. 一致性Hash算法(KetamaHash)的c#实现
  3. HDU 4549 M斐波那契数列
  4. Java程序利用POJ读写Excel的.xls或.xlsx文件所需的3个jar包
  5. [Java基础]反射获取成员变量并使用
  6. foreach语句的的解析
  7. python迭代-可迭代对象与迭代器对象
  8. 百面机器学习 #3 经典算法:01-3 核函数支撑向量机SVM
  9. 解决VC++6.0打开文件或添加文件到工程出错的问题
  10. java 之 观察者模式(大话设计模式)
  11. uniapp本地存储
  12. 换把人体工学椅,缓解久坐写代码的老腰吧~
  13. python读取图片各点灰度值_用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)...
  14. AD9854+STM32正弦波信号发生器
  15. 抓住那头牛(BFS广搜)
  16. 怎么在Excel中准确提取出姓名中的姓氏
  17. 安卓手机主题软件_安卓必备APP大盘点:10款软件让你的手机脱胎换骨
  18. 公众号留言板怎么开通
  19. hdmi接口线_HDMI接口如何区分?
  20. 关于form表单提交时的坑,submit,submit,submit

热门文章

  1. TensorFlow--实现人脸识别实验精讲 (Face Recognition using Tensorflow)
  2. python3读取excel文件(xls/xlsx)
  3. 8086汇编语言指令总结
  4. 简单快捷方法:CAJ 文件转 成PDF文件
  5. eeglab中文教程系列(10)-利用光谱选项绘制ERP图像
  6. oracle rac vip什么用,oracle 10g,11g RAC中vip作用
  7. 在腾讯做只有10万人用的产品,这群工程师竟然还很高兴
  8. 如何0代码、快速定制企业级NLP模型?百度技术大咖在线解析,可报名
  9. 小米Redmi 5G旗舰 K30 Pro,最大亮点:怼华为荣耀
  10. 手机拍视频,实时换背景,继马卡龙玩图后,Versa又出了一款更厉害的App