当前位置:首页 > 公众号精选 > 架构师社区
[导读]初期的多线程,线程是在用户空间下实现的。

这个问题是安琪拉之前面试被问到的一个问题,正好顺着上一篇文章介绍完线程调用时的用户态和内核态的切换,后续把Java 并发的都一起讲了。

面试官:听前一个面试官说你Java并发这块掌握的不错,我们深入的交流一下;

我:  看了看面试官头部稀疏的结缔组织,已然觉得这场面试不简单,不过好在事前把安琪拉的博客看了个遍,有所准备,我回答说:咳咳,掌握的还算可以。

面试官:Java线程用过的吧?

我:用过。

面试官:那你给我讲讲Java线程和操作系统的?

我:啊!!!

阿里面试官问我Java线程和操作系统线程什么关系

咆哮

剧情不应该这样的啊,开场不应该先是 synchronized 或者 volatile,再然后是线程池和AQS,怎么上来就整这玩意。

我:好的,那我分三段讲,

  • 用户态的线程

  • 内核态的线程

  • Java 线程源码

1. 用户态的线程

第一阶段:

其实早期的时候,操作系统是没有线程的概念,线程是后面加进来的,操作系统刚开始只有进程,操作系统分配资源的最小单位是进程,进程与进程之间相关隔离,每个进程有自己的内存空间,文件描述符,CPU调度以进程作为最小调度单元;

第二阶段:

初期的多线程,线程是在用户空间下实现的。

什么意思?我们都知道内存分用户空间和系统空间,系统空间是给操作系统使用的,用户空间是应用程序使用的,应用程序如果需要访问系统空间,需要进行系统调用,从用户态切换到内核态,这里详细可以参考我上一篇文章: [讲讲用户空间和内核空间]

那怎么在用户空间实现的多线程呢?

实际上是操作系统按进程维度来调度,操作系统是不去管你用户线程的切换的,应用程序自己在用户空间实现线程的创建、维护和调度。模型如下图:

阿里面试官问我Java线程和操作系统线程什么关系

当线程在用户空间下实现时,操作系统对线程的存在一无所知,操作系统只能看到进程,而不能看到线程。所有的线程都是在用户空间实现。在操作系统看来,每一个进程只有一个线程。

这种方式的好处之一就是即使操作系统不支持线程,也可以通过库函数来支持线程。在JDK1.1中,就用的绿色线程,而不是原始线程。

下面是关于green thread的解释,因为green thread不是今天的重点,就不细说了。

green threads 是一种由运行环境或虚拟机(VM)调度,而不是由本地底层操作系统调度的线程。绿色线程并不依赖底层的系统功能,模拟实现了多线程的运行,这种线程的管理调配发生在用户空间而不是内核空间,所以它们可以在没有原生线程支持的环境中工作。
在Java 1.1中,绿色线程(至少在 Solaris 上)是JVM 中使用的唯一一种线程模型。由于绿色线程和原生线程比起来在使用时有一些限制,随后的 Java 版本中放弃了绿色线程,转而使用native threads

这种模式的优点和缺点都非常明显:

缺点: 因为操作系统不知道线程的存在,CPU的时间片切换是以进程为维度的,如果进程中有某个线程进行了某些耗时长的操作,会阻塞整个进程。另外当一个进程中的某一个线程(绿色线程)进行系统调用时,比如网络IO、缺页中断等操作而导致线程阻塞,操作系统也会阻塞整个进程,即使这个进程中其它线程还在工作。

优点: 使用库函数来实现的线程切换,就免去了用户态到内核态的切换,这个味道熟不熟,对了,Go的协程就有借鉴了一部分这个思想。

2. 内核态的线程

在 Java1.2 之后. Linux中的JVM是基于pthread实现的, 可以直接说 Java 线程就是依赖操作系统实现的,是1:1的关系。

现在的Java中线程的本质,其实就是操作系统中的线程

另外我看很多资料上说 Java线程的实现采用的是LWP(轻量级进程),实际上从Linux 内核2.6开始,就把LinuxThread 换成了新的线程实现方式NPTL,NPTL解决了LinuxThread中绝大多数跟POSIX标准不兼容的特性,并提供了更好的性能,可扩展性及可维护性等等。

LinuxThread使用的是1 * 1模型,即每一个用户态线程都有一个内核的管理实体跟其对应,这个内核对应的管理实体就是进程,又称LWP(轻量级进程)

希望了解更多NPTL的可以去看详细介绍NPTL.

阿里面试官问我Java线程和操作系统线程什么关系

我们知道,每个线程都有它自己的线程上下文,线程上下文包括线程的ID、栈、程序计数器、通用的寄存器等的合集。总觉得上下文这个词很模棱二可,但是发现也找不到更合适的词来描述。

线程有自己的独立的上下文,由操作系统调度,但是也有一个缺点,那就是线程消耗资源太大了,例如在linux上,一个线程默认的栈大小是1M,单机创建几万个线程就有点吃力了。所以后来在编程语言的层面上,就出现了协程这个东西。

协程的模式有点类似结合了上面二种方式,即是在用户态做线程资源切换,也让操作系统在内核层做线程调度。

协程跟操作系统的线程是有映射关系的,例如我们建了m个协程,需要在N个线程上执行,这就是m: n的方案,这n个线程也是靠操作系统调度实现。

另外协程是按需使用栈内存的,所以理论上可以轻轻松松创建百万级的协程。

目前协程这块支持的最好的是go语言, 不过现在OpenJDK社区也正在为JDK增加协程的支持。

3. 线程的源码

我们在Java中调用new Thread(Runnable ***).start()方法时,怎么从用户态切到内核态,发送系统调用,在操作系统内核层中创建一个线程的呢?

这个可以一步步往下钻,关键点最后在JVM层系统调用pthread_create创建线程。

首先是native方法:private native void start0();

下到Thread.c 文件,:

阿里面试官问我Java线程和操作系统线程什么关系

OpenJDK1.8源代码第44行,方法映射;追着 JVM_StartThread 进到jvm.cpp

阿里面试官问我Java线程和操作系统线程什么关系

linux 系统下的,看src/hotspot/os/linux/os_linux.cpp

阿里面试官问我Java线程和操作系统线程什么关系

主要关注 pthread_create 这里,是通过linux 的 c库函数完成系统调用,从用户态切到内核态完成线程的创建。

文中源代码地址:

Thread.c

pthread_create

os_linux

下一篇文章介绍 Java 线程的几种状态的切换, 也是非常重要的知识点。

最后说下怕误导大家,说下头发不属于结缔组织。

网友喜欢把剪头发说成:明天我就要去动手术了,头部结缔组织群体切割手术,祝我好运 !

参考:

[Understanding java's native threads and the jvm]


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭