美文网首页高并发解决方案
Java线程上下文切换

Java线程上下文切换

作者: 架构师奶爸 | 来源:发表于2020-09-24 09:49 被阅读0次

巧妙地利用了时间片轮转的方式, CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载, 这段过程就叫做上下文切换。时间片轮转的方式使多个任务在同一颗CPU 上执行变成了可能。


image.png

进程

(有时候也称做任务)是指一个程序运行的实例。在Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。

上下文

是指某一时间点 CPU 寄存器和程序计数器的内容。

寄存器

是 CPU 内部的数量较少但是速度很快的内存(与之对应的是 CPU 外部相对较慢的 RAM 主内存)。寄存器通过对常用值(通常是运算的中间值)的快速访问来提高计算机程序运行的速度。

程序计数器

是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体依赖于特定的系统。

PCB切换桢

上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行切换,上下文切换过程中的信息是保存在进程控制块(PCB, process control block)中的。PCB 还经常被称作“切换桢”(switchframe)。信息会一直保存到CPU 的内存中,直到他们被再次使用。

上下文切换的活动

  1. 挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处。
  2. 在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复。
  3. 跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程在程序中。

引起线程上下文切换的原因

  1. 当前执行任务的时间片用完之后,系统CPU 正常调度下一个任务;
  2. 当前执行任务碰到IO 阻塞,调度器将此任务挂起,继续下一任务;
  3. 多个任务抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续下一任务;
  4. 用户代码挂起当前任务,让出CPU 时间;
  5. 硬件中断;

相关文章

  • 并发编程

    01 进程和线程 02 并行和并发 03 Java线程 04 栈与栈帧 05 线程上下文切换 06 线程常见方法 ...

  • Android Handler机制1--Thread

    本篇文章的主要内容如下: 1、Java线程概念2、Android线程的实现3、线程的阻塞4、关于线程上下文切换5、...

  • 第1/2/3章

    上下文切换: CPU切换线程时就产生了一次上下文切换; Java如何实现原子操作: 锁和CAS操作; happen...

  • 地铁快餐:Java并发编程73道面试题快速一览

    地铁快餐 1、在java中守护线程和本地线程区别? 2、线程与进程的区别? 3、什么是多线程中的上下文切换? 4、...

  • Java并发编程73道面试题快速一览

    1、在java中守护线程和本地线程区别? 2、线程与进程的区别? 3、什么是多线程中的上下文切换? 4、死锁与活锁...

  • CAS

    在Java中,使用悲观锁会导致频繁的线程上下文切换和重新调度开销,Java 提供了非阻塞的volatile 关键字...

  • Java线程并发

    打算细嚼慢咽Thinking in Java这本书。从自己觉得最难的多线程并发开始写起。 上下文切换阻塞,如果没有...

  • 并发编程的挑战

    上下文切换 上下文切换发生于计算机CPU从一个进程或线程切换到不同的进程或线程。 上下文切换允许一个CPU处理多个...

  • CPU 上下文切换(上)

    根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景 进程上下文切换 线程上下文切换 中断上下文切换 小结...

  • Java线程上下文切换

    巧妙地利用了时间片轮转的方式, CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的...

网友评论

    本文标题:Java线程上下文切换

    本文链接:https://www.haomeiwen.com/subject/wuhzyktx.html