⛳ 多线程面试-什么是多线程上下文切换?

这篇具有很好参考价值的文章主要介绍了⛳ 多线程面试-什么是多线程上下文切换?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

⛳ 多线程面试-什么是多线程上下文切换?

多线程会共同使用一组计算机上的CPU ,而线程数大于给线程分配的 CPU 数量时,为了让各个线程都有执行的机会,就需要轮转使用CPU。

不同的线程切换使用 CPU, 发生的切换数据等, 就是上下文切换

  • 在上下文切换过程中, CPU 会停止处理当前运行的程序, 并保存当前程序运行的具体位置, 以便之后继续运行. 从这个角度来看, 上下文切换有点像我们同时阅读几本书, 在来回切换书本的同时我们需要记住每本书当前读到的页码. 在程序中, 上下文切换过程中的 “页码” 信息是保存在进程控制块(PCB)中的。PCB 还经常被称作 “切换帧”(switchframe)。“页码”信息会一直保存到CPU的内存中,直到他们被再次使用。
  • 上下文切换是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。上下文切换是多任务操作系统和多线程环境的基本特征。

🎁 Java中用到的线程调度算法是什么?

假设计算机只有一个CPU,则在任意时刻只能执行一个条机器指令,每个线程只有获得CPU的使用权才能执行指令。

  • 所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。
  • 在运行池中,会有多个处于就绪状态的线程在等待CPU,Java虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权。

有两种调度模型:分时调度模型和抢占式调度模型。

  • 分时调度模型是指让所有的线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。

  • Java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占有CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,是其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

    如非特别需要,尽量不要用,防止线程接饥饿。

🎨 什么是线程饥饿 ?

饥饿,一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态 。

Java 中导致饥饿的原因:

  • 高优先级线程吞噬所有的低优先级线程的 CPU 时间。
  • 线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。
  • 线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的 wait 方法),因为其他线程总是被持续地获得唤醒。

你对线程优先级的理解是什么?

每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。文章来源地址https://www.toymoban.com/news/detail-634727.html

  • 我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个 int 变量(从1-10),1 代表最低优先级,10 代表最高优先级。
  • Java 的线程优先级调度会委托给操作系统去处理,所以与具体的操作系统优先级有关,如非特别需要,一般无需设置线程优先级。

到了这里,关于⛳ 多线程面试-什么是多线程上下文切换?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CSAPP】进程 | 上下文切换 | 用户视角下的并发进程

      💭 写在前面: 本文将学习《深入理解计算机系统》的第六章 - 关于异常控制流和系统级 I/O 的 进程部分。CSAPP 是计算机科学经典教材《Computer Systems: A Programmer\\\'s Perspective》的缩写,该教材由Randal E. Bryant和David R. O\\\'Hallaron 合著。 📜 本章目录: 0x00 进程(Processes) 0x01 假象

    2024年01月16日
    浏览(58)
  • 从零开始理解Linux中断架构(10)---上下文切换长征路

    有了前面章节的一大堆的铺垫,我们现在考虑一个路径比较长的任务切换: 当前 用户态进程 10#,在中断发生后,被切换到了 用户态进程 15#。        这里将使用异常执行流的概念来解释切换过程。理解了最长的那个切换,其他的任务切换:通过系统调用引起的任务切换,

    2024年02月11日
    浏览(46)
  • JS引擎中的线程,事件循环,上下文

      线程 浏览器中有哪些进程呢? 1.浏览器进程:浏览器的主进程,负责浏览器的界面界面显示,与用户交互,网址栏输入、前进、后退,以及页面的创建和销毁。 2.渲染进程(浏览器内核):默认一个tab页面一个渲染进程,主要的作用为页面渲染,脚本执行,事件处理等。 3.

    2024年02月08日
    浏览(91)
  • 零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(下)

    在前一章节中,我们了解了DMA技术在文件传输中的重要性,并简要介绍了零拷贝技术。为了提高文件传输的性能,我们需要减少用户态与内核态之间的上下文切换次数以及内存拷贝次数。本章将深入探讨零拷贝技术的优化方法,让我们一起走进零拷贝的优化之路! 当我们意识

    2024年02月08日
    浏览(55)
  • 零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(上)

    当涉及到网络传输中的零拷贝技术时,它在提高性能和效率方面扮演着重要的角色。在之前我们已经讨论了磁盘设备管理中的零拷贝技术,其中涉及到了DMA技术。现在,让我们来深入探讨一下网络传输中零拷贝技术的实现方式以及它的重要性。 在没有DMA(直接内存访问)技术

    2024年02月08日
    浏览(41)
  • Linux_进程的优先级&&环境变量&&上下文切换&&优先级队列

    什么是优先级? 指定一个进程获取某种资源的先后顺序 本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源(CPU)是有限的 操作系统关于调度和优先级的原则:分时操作系统,基本的公平,如果进程因为长时间不被调整,就造成了饥饿问题 Linux的优先级特

    2024年04月09日
    浏览(54)
  • Flask 上下文是什么 ?

    哈喽大家好,我是咸鱼。今天我们来聊聊什么是 Flask 上下文   咸鱼在刚接触到这个概念的时候脑子里蹦出的第一个词是 CPU 上下文   今天咸鱼希望通过这篇文章,让大家能够对 Flask 上下文设计的初衷以及应用有一个基本的了解   我们在使用 Flask 开发 web 程序的时候,通常会

    2023年04月20日
    浏览(55)
  • vue-element-plus-admin框架的tag上下文切换bug

    首先贴上该框架的链接:https://github.com/kailong321200875/vue-element-plus-admin 在对路由进行部分修改后,网站多次切换tag时,控制台会出现报错: Cannot read properties of undefined (reading \\\'offsetLeft\\\') 。 我在框架的issue中找到了类似问题:打开多个TagsView时会报错,用的 template 分支 对此,作

    2024年02月15日
    浏览(45)
  • Arm Cortex R52与TC3xx Aurix上下文切换对比

    目录 1.Arm Cortex R52上下文切换 2.英飞凌TC3xx的CPU上下午切换 2.1 上下文类型 2.2 Task Switching Operation  2.3 Context管理寄存器  2.4 各种事件的上下文切换 2.4.1 中断/Trap的上下文切换 2.4.2 函数调用的上下文切换 2.4.3 FCALL/FRET的上下文切换 2.5 Context Save、Restore操作 2.6 Context 切换性能特性

    2024年02月02日
    浏览(60)
  • 什么是层叠上下文(stacking context)?它是如何形成的?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包