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

news/2024/4/28 3:46:13/文章来源:https://blog.csdn.net/weixin_53456849/article/details/132116895

目录

  • ⛳ 多线程面试-什么是多线程上下文切换?
    • 🎁 Java中用到的线程调度算法是什么?
    • 🎨 什么是线程饥饿 ?
    • 你对线程优先级的理解是什么?

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

多线程会共同使用一组计算机上的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)。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_529173.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stephen Wolfram:嵌入的概念

The Concept of Embeddings 嵌入的概念 Neural nets—at least as they’re currently set up—are fundamentally based on numbers. So if we’re going to to use them to work on something like text we’ll need a way to represent our text with numbers. And certain…

IL汇编实现两数相加输出结果

话说前面没有实现IL汇编2数相加;鼓捣了一下,实现的代码如下; .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 8.entrypoint.locals init (int32 V_0, int3…

从URL取值传给后端

从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情,跳转至详情页面 从 url 中拿出文章 id,传给后端 首先拿到url然后判断是否有值,从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…

Cilium系列-13-启用XDP加速及Cilium性能调优总结

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

【Linux】节点之间配置免密登录

文章目录 1、实现2、原理3、SSH的理解 1、实现 先写实现,解决问题后有兴趣的自己看后面的原理。 以实现节点A(主)免密登录到节点B(从)为例:(注意例子里节点B被登录) 步骤一&#xf…

917.仅仅反转字母+HJ1.字符串最后一个单词的长度

一、仅仅反转字母 917. 仅仅反转字母 - 力扣&#xff08;LeetCode&#xff09; 二、代码 双指针 class Solution { public:bool IsABC(char ch){if(ch>a &&ch<z)return true;if(ch>A && ch<Z)return true;return false;}string reverseOnlyLett…

LLM reasoners 入门实验 24点游戏

LLM reasoners Ber666/llm-reasoners 实验过程 实验样例24games&#xff0c;examples/tot_game24&#xff0c;在inference.py中配置使用代理和open ai的api key。 首先安装依赖 git clone https://github.com/Ber666/llm-reasoners cd llm-reasoners pip install -e .然后…

LabVIEW开发3D颈动脉图像边缘检测

LabVIEW开发3D颈动脉图像边缘检测 近年来&#xff0c;超声图像在医学领域对疾病诊断具有重要意义。边缘检测是图像处理技术的重要组成部分。边缘包含图像信息。边缘检测的主要目的是根据强度和纹理等属性识别图像中均匀区域的边界。超声&#xff08;US&#xff09;图像存在视觉…

Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题

Visual Studio在Debug模式下&#xff0c;MFC工程中包含Eigen库时的定义冲突的问题 报错信息 Eigen\src\Core\PlainObjectBase.h(143,5): error C2061: 语法错误: 标识符“THIS_FILE” Eigen\src\Core\PlainObjectBase.h(143,1): error C2333: “Eigen::PlainObjectBase::opera…

思维能力的学习

前言 在工作中&#xff0c;随着工作时间的增长&#xff0c;我们与他人的差异不是知识本身的差异&#xff0c;主要是思维方面的差异&#xff0c;所以我们需要培养自己的思维能力。 思维能力的学习 思维是一个具备内在框架和逻辑的系统工程&#xff0c;思维覆盖了学习、认知、问…

如何在 Android 上恢复已删除的视频|快速找回丢失的记忆

想知道是否有任何成功的方法可以从 Android 手机中检索已删除的视频&#xff1f;好吧&#xff0c;本指南将向您展示分步说明&#xff0c;让您轻松从手机中找回丢失的视频文件&#xff01; 您是否不小心从 Android 智能手机中删除了珍贵的生日视频&#xff1f;难道是无处可寻吗…

复现sci顶刊中的画中画(局部细节放大)

简介 小编在撰写学术论文时&#xff0c;为了突出所提模型的优越性&#xff0c;你可以通过放大图形中的局部位置来进行比较。尽管从全局来看&#xff0c;各个方法的拟合效果都还不错&#xff0c;但通过放大图中的特定区域&#xff0c;可以更清楚地展示所提模型相对于其他模型的…

springboot基于vue的高校迎新系统的设计与实现8jf9e

随着时代的发展&#xff0c;人们的生活方式得到巨大的改变&#xff0c;从而慢慢地产生了大量高校迎新信息&#xff0c;高校迎新信息需要一个现代化的管理系统&#xff0c;进行高校迎新信息的管理。 高校迎新系统的开发就是为了解决高校迎新管理的问题&#xff0c;系统开发是基于…

恺英网络宣布:与华为鸿蒙系统展开合作,将开发多款手游

8月5日消息&#xff0c;恺英网络宣布旗下子公司盛和网络参加了华为开发者大会&#xff08;HDC.Together&#xff09;游戏服务论坛&#xff0c;并在华为鸿蒙生态游戏先锋合作启动仪式上进行了亮相。恺英网络表示&#xff0c;将逐步在HarmonyOS上开发多款游戏&#xff0c;利用Har…

第一课-前提-Stable Diffusion 教程

学习 SD 的前提是电脑配置! SD 参考配置: 建议选择台式机 i5 CPU, 内存16GB,N卡 RTX3060, 8G显存以上的配置(最低配) 在此基础上的配置越高越好。 比如,cpu i7 更好,显卡能有 RTX4090 更好,32显存要能有最好,嘿嘿嘿。 如何查看自己的显卡配置? Win+R 输入 “dxdiag…

uniapp引入inconfont

app,h5端引入 uniapp本身的全局设置中有个iconfontsrc属性 所以只需要 1.iconfont将需要的icon添加至项目 2.下载到本地解压后,将其中的ttf文件,放在static静态目录下 3.在page.json中对全局文件进行配置tabBar(导航图标) “iconfontSrc”: “static/font/iconfont.ttf”, …

拦截器登录状态校验

Redis解决了在集群模式下的 Session共享问题 Redis的Hash结构存储user对象,user对象转hash结构自定义了类型转换&#xff08;beanToMap的CopyOptions方法&#xff09;&#xff0c;因为StringRedisTemplate只支持存String 多个拦截器配合使用 ThreadLocal存用户信息保证线程安全…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】

网页版Java五子棋项目&#xff08;二&#xff09;前后端实现用户的登录和注册功能【用户模块】 在用户模块我们要清楚要完成的任务一、MyBatis后端操作数据库1. 需要在数据库创建用户数据库1. 用户id2. 用户名3. 密码4. 天梯积分5. 总场数6. 获胜场数 2. 创建用户类User和数据库…

CBCGPRibbon 添加背景图片

resource.h中声明资源的ID&#xff1a;ID_RIBBON_BACKIMAGE rc文件中添加png图片路径&#xff1a; ID_RIBBON_BACKIMAGE PNG DISCARDABLE "res\\bkribbon.png" 代码中添加下测&#xff1a; //添加背景图片 m_wndRibbonBar.SetBackgroundImage(ID_RIB…

Python(六十八)元组的创建方式

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…