千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Java领域中的线程机制-线程(二)

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

来源:千锋教育
发布人:qyf
时间: 2022-08-03 15:41:48 1659512508

  基本模型

1

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

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

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

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

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

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

2

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

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

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

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

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

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

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

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

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

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

3

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

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

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

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

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

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

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

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

4

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

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

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

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT