全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Java领域中的线程机制-线程(二)

发布时间:2022-08-03 15:41:48
发布人:qyf

  基本模型

1

  由于Java 中,JVM主要是由C/C++实现,所以Java层线程最终还是会映射到JVM层线程,而Java层的线程到操作系统层线程就得需要看具体的JVM的具体实现来决定。

  一般来说,我们都把用户线程看作更高层面的线程,而内核线程则向用户线程提供支持。

  由此可见,用户线程和内核线程之间必然存在一定的映射关系,不同的操作系统可能采取不同的映射方式。

  一般来说,按照映射方式来看,主要可以分为:多对一映射(用户级方式),一对一映射(内核级方式) 和多对多映射(组合方式)3种方式。其中:

  1. 多对一映射(用户级方式)

  多对一映射是指多个用户线程被映射到一个内核线程上。每一个进程都对应着一个内核线程,进程内的所有线程也都对应着该内核线程。

2

  多对一映射模型是指多条用户线程映射同一条内核线程的情况,其中用户线程由库调度器进行调度,而内核线程由操作系统调度器来完成。

  对于用户线程而言,其会按照一定的策略轮流执行,具体的调度算法有库调度器完成。

  任意一个时刻每一个进程中都只有一个用户线程被执行,它们的执行都由用户态的代码完成切换。

  在不支持线程的操作系统中有库来实现线程控制,用户线程创建,销毁,切换的开销代价比内核线程小。

  因此,这种模式特点主要有两点:

  首先,可以节省内核态到用户态切换的开销

  其次,线程的数量不会受到内核线程的限制

  但是,因为线程切换的工作是由用户态的代码完成的,所以一个进程内,如果当一条线程发生阻塞时,与该内核线程对应的进程内的其他所有的用户线程也会一起陷入阻塞。

  2. 一对一映射(内核级方式)

  一对一映射是指每个用户线程都会被影射到一个内核线程上,用户的整个生命周期都绑定到所映射的内核线程上。一个进程内可以有一个用户线程和至少一个用户线程,都对应着各自一个和至少一个内核线程,进程内的所有线程也都一一对应着各自内核线程。

3

  一对一映射模型是指一条用户线程对应着内核中的一条线程的情况,其中用户线程由库调度器进行调度,而内核线程由操作系统调度器来完成,而Java中采用的就是这种模型。

  在这种方式下,多个CPU能并行执行同一个进程内的多个线程。

  如果进程内的某个线程被阻塞,就可以切换到该进程的其他线程继续执行,并且能切换执行其他进程的线程。

  一对一映射模型是真正意义上的并行执行,因为这种模型下,创建一条Java的Thread线程是真正的在内核中创建并映射了一条内核线程的,执行过程中,一条线程不会因为另外一条线程的原因而发生阻塞等情况。

  不过因为是每一个用线程都需要对应一个内核线程,这种直接映射内核线程的模式,所以数量会存在上限。

  并且同一个核心中,多条线程的执行需要频繁的发生上下文切换以及内核态与用户态之间的切换,所以如果线程数量过多,切换过于频繁会导致线程执行效率下降。

  3. 多对多映射(组合方式)

  多对多映射是指将一对一映射(内核级方式)和多对一映射(用户级方式)组合起来,通过综合两者优点来形成的一种映射方式。该方式在用户空间创建,销毁,切换,调度线程,但是进程中的多个用户线程会被影射到若干个内核线程上。

4

  多对多映射模型就可以避免上面一对一映射模型和多对一映射模型带来的弊端,也就是多条用户线程映射多条内核线程,这样即可以避免一对一映射模型的切换效率问题和数量限制问题,也可以避免多对一映射模型的阻塞问题。

  每一个内核线程负责与之绑定的若干用户线程,进程中的某个线程发生系统阻塞并不会导致整个进程阻塞,而阻塞该内核线程内的所对应的若干用户线程,其他线程依旧可以照常执行。

  同时,因为用户线程数量比内核线程数量多,所以能有效减少内核线程开销。

相关文章

Cloud-IDE 是什么?

Cloud-IDE 是什么?

2023-10-14
主机和端系统之间有什么不同?

主机和端系统之间有什么不同?

2023-10-14
进程和线程有什么联系和区别?

进程和线程有什么联系和区别?

2023-10-14
结束任务管理器快捷键是什么?

结束任务管理器快捷键是什么?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取