当前位置: 首页 > news >正文

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

目录

  • ⛳ 多线程面试-什么是多线程上下文切换?
    • 🎁 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.lryc.cn/news/111479.html

相关文章:

  • vb+SQL车辆管理系统设计与实现
  • java的枚举类
  • 基于java早餐店点餐系统源码设计与实现
  • ODOO16如何处理采购运输正常损耗的成本价核算?
  • 【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】
  • 函数式编程-将过程作为返回值的应用:分步过程
  • Mysql-学习笔记
  • 【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块2
  • Windows用户如何安装新版本cpolar内网穿透
  • MacBookPro安装Win10,Wifi不能用了,触控板不能用了(2)
  • 理解C++中变量的作用域
  • vue+element-ui给全局请求设置一个loading样式
  • 传球游戏
  • 智能卡通用安全检测指南 思度文库
  • Maven设置阿里云路径(防止加载过慢)
  • JavaScript原型链污染漏洞复现与防范
  • 初识MySQL数据库之用户管理
  • JVM 类文件结构(class文件)
  • PAT乙题1011
  • 【并发专题】单例模式的线程安全(进阶理解篇)
  • 无涯教程-Perl - if...elsif...else语句函数
  • uniapp 实现滑动元素并下方有滚动条显示
  • QT充当客户端模拟浏览器等第三方客户端对https进行双向验证
  • 【JVM】 垃圾回收篇——自问自答(1)
  • Image Line FL Studio v21.0.3.3517 Producer版全插件版WIN免费下载完整版
  • PHP8条件控制语句-PHP8知识详解
  • 【PHP代码审计】ctfshow web入门 php特性 93-104
  • CSS元素的显示模式
  • Go strings.Title方法被废弃(Deprecated)
  • vuejs源码分析之全局API(vm.$off)