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

Linux笔记---进程:进程切换与O(1)调度算法

1. 补充概念

1.1 并行与并发

  • 竞争性:系统进程数目众多,而CPU资源只有少量,甚至只有1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
  • 独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  • 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
  • 并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

由于在一个操作系统中进程的数量通常是很多的,所以并发的调度方式必不可少,在这篇文章中,我们要详细探讨进程是如何切换的。

1.2 实时操作系统与分时操作系统

  • 实时操作系统:是指系统能够及时响应外部事件的请求,在规定的时间范围完成对该事件的处理,并控制实时任务协调一致地运行。实时操作系统分为硬实时系统(如火箭和导弹控制)和软实时系统(如银行),需要具备实时时钟管理、过载防护和高可靠性等能力。
  • 分时操作系统:是一种允许多个用户同时共享一台计算机资源的操作系统。它通过将计算机的处理能力划分为多个时间片,轮流分配给不同的用户进程,使得每个用户都能在短时间内得到系统的响应,就好像独占使用整个系统一样。
  • 时间片:当代计算机都是分时操作系统,每个进程都有它合适的时间片(其实就是一个计数器)。时间片到达,进程就被操作系统从CPU中剥离下来,接着其他进程将占据CPU资源,该进程回到运行队列重新排队。

 进程的时间片用完就被CPU换下,让其他进程抢占CPU资源,这一点很好理解,但有两个问题:

  1. 当一个程序再次获得CPU资源时,如何接着上次运行的进度来继续运行?
  2. CPU是如何由优先级来决定谁该抢占CPU资源的?或者说优先级是如何实现的?

2. CPU上下文切换

在Linux操作系统中,CPU上下文切换是指在多任务处理时,CPU从一个任务切换到另一个任务的过程。这个过程包括保存当前任务的CPU寄存器和程序计数器的值,加载新任务的上下文到这些寄存器和程序计数器,然后跳转到程序计数器所指的新位置,开始运行新任务。

上下文切换的目的是为了让多个任务看起来像是同时运行,而实际上CPU在短时间内轮流执行这些任务。 

简单来说,每个进程在被换下时,会将当前CPU中寄存器的内容(上下文数据)保存到自己的PCB中维护起来,再将即将执行的进程的上下文数据加载到CPU中。

在task_struct中存在字段struct tss_struct tss,该结构体就用来保存进程的上下文数据。

struct tss_struct {struct x86_hw_tss x86_tss;unsigned long io_bitmap[IO_BITMAP_LONGS + 1];unsigned long stack[64];
} ____cacheline_aligned;struct x86_hw_tss {unsigned short back_link, __blh;unsigned long sp0;unsigned short ss0, __ss0h;unsigned long sp1;unsigned short ss1, __ss1h;unsigned long sp2;unsigned short ss2, __ss2h;unsigned long __cr3;unsigned long ip;unsigned long flags;unsigned long ax;unsigned long cx;unsigned long dx;unsigned long bx;unsigned long sp;unsigned long bp;unsigned long si;unsigned long di;unsigned short es, __esh;unsigned short cs, __csh;unsigned short ss, __ssh;unsigned short ds, __dsh;unsigned short fs, __fsh;unsigned short gs, __gsh;unsigned short ldt, __ldth;unsigned short trace;unsigned short io_bitmap_base;
} __attribute__((packed));
  1. x86_tss: 这是一个x86_hw_tss类型的结构体,它定义了硬件状态信息,包括寄存器的值、堆栈指针等。
  2. io_bitmap: 这是一个unsigned long类型的数组,用于存储I/O权限位图。
  3. stack: 这是一个unsigned long类型的数组,用于存储紧急内核堆栈。

上下文切换的性能影响

上下文切换是有一定开销的,每次上下文切换都需要几十纳秒到数微秒的CPU时间。特别是在进程上下文切换次数较多的情况下,很容易导致CPU将大量时间耗费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,进而大大缩短了真正运行进程的时间

3. O(1)调度算法

接下来的问题就是,操作系统如何根据优先级决定下一个接手CPU资源的进程是哪一个。

加入依次检查调度队列中的进程的优先级并从中选择的话,时间复杂度会达到O(n)。

O(1)调度算法是Linux内核中的一种进程调度算法,其名称中的“O(1)”表示该算法的时间复杂度是常数级别的,与系统中的进程数量无关。这种算法的设计目的是为了解决O(n)调度算法在处理大量进程时效率低下的问题。

下图是Linux中运行队列的结构示意图:

 我们要讨论的核心在于:

3.1 prio_array结构体

在runqueue中有一个只含两个元素的结构体数组字段,即图中的array[0]和array[1]:

struct prio_array {unsigned int nr_active; /* 本组中待处理进程的总数 */unsigned long bitmap[BITMAP_SIZE]; /* 用位图的方式表示某个优先级上有没有待处理的进程队列 */struct list_head queue[MAX_PRIO]; /* 与bitmap对应,存储所有待运行的进程 */
};// #define 5 BITMAP_SIZE
// #define 140 MAX_PRIO
  1. nr_active:表示本组中待处理进程的总数。
  2. bitmap:这是一个位图,用于表示某个优先级上是否有待处理的进程队列。位图中的每一位对应一个优先级,1表示该优先级上有待处理的进程队列,0表示没有。
  3. queue:这是一个队列数组,用于存储所有待运行的进程。数组的下标对应进程的优先级,每个元素都是一个队列,队列中的节点是具有相同优先级的进程。例如,优先级为124的进程会被放到下标为124的队列中排队。

 根据上面的信息可以知道,整个操作系统中的优先级范围为[0,140),共140种:

  • 普通优先级:100〜139(对应nice值可取的40种优先级)。
  • 实时优先级:0〜99(不关心)。

通过让不同优先级的进程到不同的队列中排队,并按下标从低到高地调度每个队列,就保证了优先级高的进程先被执行。

bitmap是一个位图,包含5个整形元素,共160个比特位,前140个比特位依次对应140个优先级的队列 。通过这个bitmap就可以快速定位到非空的队列,而不用依次查找每个队列。

效率以及优先级如何保证的问题解决了,但是,被调度过后需要重新排队的进程以及新加入的进程应该被添加到哪里呢?假设重新添加到当前的queue中,那么在优先级高的进程被完全执行完毕之前,优先级较低的进程都不会被执行。

为了解决这个问题,我们提出了活跃队列和过期队列的概念。

3.2 活跃队列与过期队列

O(1)调度算法通过维护两个运行队列来实现:活动队列(active queue)和过期队列(expired queue)。活动队列中的进程是有资格获取CPU时间片的进程,而过期队列中的进程是已经用完时间片的进程。操作系统始终只会调度活动队列中的进程。

活动队列中的进程的时间片被用完之后会被添加到过期队列中,重新排队的同时,防止其一直占用CPU资源。

array[0]和array[1]轮流成为活动队列和过期队列,当活动队列中所有的进程都用完时间片,也就是活动队列中没有可运行的进程时,活动队列和过期队列进行交换。此时原来的过期队列变为活动队列,而原来的活动队列变为过期队列,新的活动队列中的进程又可以开始竞争CPU资源。

谁是活动队列,谁是过期队列,取决于active指针和expired指针的指向。

3.3 O(1)调度算法的优点

  • 高效性:由于查找下一个要运行的进程的时间复杂度为O(1),无论系统中有多少个进程都能快速地做出调度决策,提高了系统的响应速度和整体性能。
  • 公平性:保证了分时操作系统调度进程的公平性,每个进程都有机会运行。

相关文章:

Linux笔记---进程:进程切换与O(1)调度算法

1. 补充概念 1.1 并行与并发 竞争性:系统进程数目众多,而CPU资源只有少量,甚至只有1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。独立性:多进程运…...

Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)

使用Flink编写代码,步骤非常固定,大概分为以下几步,只要牢牢抓住步骤,基本轻松拿下: 1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 DataStream API开发 //n…...

[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

目录 关键词平台说明背景一、Process Jump to Bootloader二、相关函数和配置2.1 Dcm_GetProgConditions()2.2 Dcm_SetProgConditions() 三、如何实现在APP 还是BOOT 中对10 02服务响应3.1 配置3.2 code 四、报文五、小结 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagno…...

用 Python 写了一个天天酷跑(附源码)

Hello,大家好,给大家说一下,我要开始装逼了 这期写个天天酷跑玩一下叭! 制作一个完整的“天天酷跑”游戏涉及很多方面,包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言,…...

WebGL进阶(九)光线

理论基础: 点光源 符合向量定义,末减初。 平行光 环境光 效果: 点光源 平行光 环境光 源码: 点光源 // 顶点着色器程序let vertexstring attribute vec4 a_position; // 顶点位置属性uniform mat4 u_formMatrix; // 用于变换…...

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始,filter 被弃用,导致无法进行调节过滤。 TermInSetQuery 指定…...

HarmonyOS(57) UI性能优化

性能优化是APP开发绕不过的话题,那么在HarmonyOS开发过程中怎么进行性能优化呢?今天就来总结下相关知识点。 UI性能优化 1、避免在组件的生命周期内执行高耗时操作2、合理使用ResourceManager3、优先使用Builder方法代替自定义组件4、参考资料 1、避免在…...

机器学习周志华学习笔记-第5章<神经网络>

机器学习周志华学习笔记-第5章<神经网络> 卷王&#xff0c;请看目录 5模型的评估与选择5.1 神经元模型5.2 感知机与多层网络5.3 BP(误逆差)神经网络算法 5.4常见的神经网络5.4.1 RBF网络&#xff08;Radial Basis Function Network&#xff0c;径向基函数网络&#xff0…...

SQL进阶技巧:如何进行数字范围统计?| 货场剩余货位的统计查询方法

目录 0 场景描述 1 剩余空位区间和剩余空位编号统计分析 2 查找已用货位区间 3 小结 0 场景描述 这是在做一个大型货场租赁系统时遇到的问题,在计算货场剩余存储空间时,不仅仅需要知道哪些货位是空闲的,还要能够判断出哪些货位之间是连续的。因为在新货物入场时,可…...

Xilinx IP核(3)XADC IP核

文章目录 1. XADC介绍2.输入要求3.输出4.XADC IP核使用5.传送门 1. XADC介绍 xadc在 所有的7系列器件上都有支持&#xff0c;通过将高质量模拟模块与可编程逻辑的灵活性相结合&#xff0c;可以为各种应用打造定制的模拟接口&#xff0c;XADC 包括双 12 位、每秒 1 兆样本 (MSP…...

现代大数据架构设计与实践:从数据存储到处理的全面解读

1. 引言 随着信息技术的不断发展,数据已经成为企业和组织最宝贵的资产之一。大数据的应用已经渗透到各个行业,无论是电商、金融,还是医疗、物流,如何有效管理、存储和处理海量的数据已经成为企业成功的关键之一。本文将深入探讨现代大数据架构的设计理念与技术实践,从数据…...

详细教程-Linux上安装单机版的Hadoop

1、上传Hadoop安装包至linux并解压 tar -zxvf hadoop-2.6.0-cdh5.15.2.tar.gz 安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1u59OLTJctKmm9YVWr_F-Cg 提取码&#xff1a;0pfj 2、配置免密码登录 生成秘钥&#xff1a; ssh-keygen -t rsa -P 将秘钥写入认…...

前端项目支持tailwindcss写样式

安装 npm install -D tailwindcss npx tailwindcss init配置 tailwind.config.js //根据个人需求填写&#xff0c;比如vue简单配置 /** type {import(tailwindcss).Config} */ module.exports {darkMode: "class",corePlugins: {preflight: false},content: [&quo…...

工程师 - 智能家居方案介绍

1. 智能家居硬件方案概述 智能家居硬件方案是实现家庭自动化的重要组件&#xff0c;通过集成各种设备来提升生活的便利性、安全性和效率。这些方案通常结合了物联网技术&#xff0c;为用户提供智能化、自动化的生活体验。硬件方案的选择直接影响到智能家居系统的性能、兼容性、…...

H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;影响着整个行业的发展方向。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持…...

2.langchain中的prompt模板 (FewShotPromptTemplate)

本教程将介绍如何使用 LangChain 库中的 PromptTemplate 和 FewShotPromptTemplate 来构建和运行提示&#xff08;prompt&#xff09;&#xff0c;并通过示例数据展示其应用。 安装依赖 首先&#xff0c;确保你已经安装了 langchain 和相关依赖&#xff1a; pip install lan…...

TCP/IP

1、浏览器输入网址后发生了什么 1&#xff09;应用层&#xff1a;浏览器解析ULR&#xff0c;生成发送给web服务器的请求信息&#xff0c;HTTP请求报文生成&#xff0c;委托给操作系统将消息发送给web服务器&#xff0c;发送之前需要查询服务器域名对应的IP地址&#xff08;需要…...

详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案

本文旨在深入探讨xinput1_3.dll这一动态链接库文件。首先介绍其在计算机系统中的功能和作用&#xff0c;特别是在游戏和输入设备交互方面的重要性。然后分析在使用过程中可能出现的诸如文件丢失、版本不兼容等问题&#xff0c;并提出相应的解决方案&#xff0c;包括重新安装相关…...

Spring:AOP切入点表达式

对于AOP中切入点表达式&#xff0c;我们总共会学习三个内容&#xff0c;分别是语法格式、通配符和书写技巧。 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式 对于切入点的描述&#xff0c;我们其实是有两中方式的&a…...

STM32的中断(什么是外部中断和其他中断以及中断号是什么)

一、什么是EXTI 和NVIC EXTI&#xff08;External Interrupt/Event Controller&#xff09;EXTI 是外部中断/事件控制器&#xff0c;它负责处理外部信号变化&#xff0c;并将信号传递给中断控制器&#xff08;如 NVIC&#xff09;。主要负责以下功能&#xff1a; 外部事件检测…...

MySQL底层概述—1.InnoDB内存结构

大纲 1.InnoDB引擎架构 2.Buffer Pool 3.Page管理机制之Page页分类 4.Page管理机制之Page页管理 5.Change Buffer 6.Log Buffer 1.InnoDB引擎架构 (1)InnoDB引擎架构图 (2)InnoDB内存结构 (1)InnoDB引擎架构图 下面是InnoDB引擎架构图&#xff0c;主要分为内存结构和磁…...

Linux 下进程基本概念与状态

文章目录 一、进程的定义二、 描述进程-PCBtask_ struct内容分类 三、 进程状态 一、进程的定义 狭义定义&#xff1a;进程是正在运行的程序的实例&#xff08;an instance of a computer program that is being executed&#xff09;。广义定义&#xff1a;进程是一个具有一定…...

Go语言链接Redis数据库

1.使用go get命令安装go-redis/v8库&#xff1a; 我这里使用的vscode工具安装&#xff1a; go get github.com/go-redis/redis/v82.创建Redis客户端实例 使用以下Go代码连接到Redis服务器并执行命令&#xff1a; package mainimport ("context""fmt"&q…...

SQL 分页查询详解

在处理大型数据集时&#xff0c;分页查询是一种常见的技术&#xff0c;用于将数据分成多个小块&#xff0c;以便逐步加载和显示。这不仅可以提高应用的性能&#xff0c;还可以提升用户体验&#xff0c;避免一次性加载过多数据导致页面加载缓慢或资源消耗过大。本文将详细介绍 S…...

ACP科普:风险价值矩阵

风险价值矩阵&#xff08;Risk-Value Matrix&#xff09;是一种常用的工具&#xff0c;用于在项目管理中帮助团队识别、评估和优先处理风险。它通过将风险和价值两个因素进行结合&#xff0c;帮助决策者明确哪些风险需要优先关注和处理&#xff0c;从而有效地管理项目的不确定性…...

计算机网络socket编程(2)_UDP网络编程实现网络字典

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(2)_UDP网络编程实现网络字典 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…...

(Keil)MDK-ARM各种优化选项详细说明、实际应用及拓展内容

参考 MDK-ARM各种优化选项详细说明、实际应用及拓展内容 本文围绕MDK-ARM优化选项,以及相关拓展知识(微库、实际应用、调试)进行讲述,希望对你今后开发项目有所帮助。 1 总述 我们所指的优化,主要两方面: 1.代码大小(Size) 2.代码性能(运行时间) 在MDK-ARM中,优…...

mac2024 安装node和vue

以下是使用 Node.js 官方 .pkg 安装包 安装 Node.js 和 Vue CLI 的完整流程&#xff0c;包括如何重新设置 npm 的环境&#xff0c;以避免权限问题。 安装 Node.js 步骤 1.1&#xff1a;下载 Node.js 安装包 1. 打开 Node.js 官网。 2. 下载 LTS&#xff08;长期支持&#xf…...

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署&#xff0c;请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项&#xff1a;后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…...

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

鸿蒙开发-音视频

Media Kit 特点 一般场合的音视频处理&#xff0c;可以直接使用系统集成的Video组件&#xff0c;不过外观和功能自定义程度低Media kit&#xff1a;轻量媒体引擎&#xff0c;系统资源占用低支持音视频播放/录制&#xff0c;pipeline灵活拼装&#xff0c;插件化扩展source/demu…...

Vue3学习笔记

目录 Vue3Vue3优势Vue3组合式API & Vue2选项式APIcreate-vue使用create-vue创建项目 项目目录和关键文件组合式API-setup选项组合式API-reactive和ref函数reactive()ref() 组合式API-computed组合式API-watch基础使用immdiate和deep配置精确侦听对象的某个属性 组合式API-生…...

node + Redis + svg-captcha 实现验证码

目录 前提说明 Redis链接与封装 svg-captcha使用步骤 封装中间件验证 前端接收 扩展【svg API】 svgCaptcha.create(options) svgCaptcha.createMathExpr(options) svgCaptcha.loadFont(url) svgCaptcha.options svgCaptcha.randomText([size|options]) svgCaptcha(…...

dubbo-go框架介绍

框架介绍 什么是 dubbo-go Dubbo-go 是 Apache Dubbo 的 go 语言实现&#xff0c;它完全遵循 Apache Dubbo 设计原则与目标&#xff0c;是 go 语言领域的一款优秀微服务开发框架。dubbo-go 提供&#xff1a; API 与 RPC 协议&#xff1a;帮助解决组件之间的 RPC 通信问题&am…...

玛哈特矫平机:工业制造中的平整利器

在日新月异的工业制造领域&#xff0c;每一个细节都至关重要。而在这其中&#xff0c;矫平机以其独特的功能和卓越的性能&#xff0c;成为了不可或缺的重要工具。它就像一位技艺高超的工匠&#xff0c;精心雕琢着每一件工业产品&#xff0c;赋予它们平整、光滑的表面。 矫平机…...

IDEA 2024安装指南(含安装包以及使用说明 cannot collect jvm options 问题 四)

汉化 setting 中选择插件 完成 安装出现问题 1.可能是因为之前下载过的idea&#xff0c;找到连接中 文件&#xff0c;卸载即可。...

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…...

共享单车管理系统项目学习实战

前言 Spring Boot Vue前后端分离 前端&#xff1a;Vue&#xff08;CDN&#xff09; Element axios(前后端交互) BaiDuMap ECharts(图表展示) 后端&#xff1a;Spring Boot Spring MVC(Web) MyBatis Plus(数据库) 数据库:MySQL 验证码请求 git提交 cd C:/Users/Ustini…...

学Linux的第九天--磁盘管理

目录 一、磁盘简介 &#xff08;一&#xff09;、认知磁盘 &#xff08;1&#xff09;结构 &#xff08;2&#xff09;物理设备的命名规则 &#xff08;二&#xff09;、磁盘分区方式 MBR分区 MBR分区类型 扩展 GPT格式 lsblk命令 使用fdisk管理分区 使用gdisk管理分…...

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同&#xff0c;(Radford et al., 2021) 引入了一种新范式&#xff0c;该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中&#xff0c;通…...

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期&#xff1a;20241120 学习目标&#xff1a;http定义及实战 -- http基础介绍 学习笔记&#xff1a; HTTP定义 HTTP 是一个协议&#xff08;服务器传输超文本到浏览器的传送协议&#xff09;&#xff0c;是基于 TCP/IP 通信协议来传递数据&…...

维护表空间和数据文件(一)

学习目标 定义表空间和数据文件的用途创建表空间管理表空间使用Oracle管理文件&#xff08;OMF&#xff09;创建和管理表空间获取表空间信息 表空间和数据文件 Oracle逻辑上将数据存储在表空间中&#xff0c;物理上将数据存储在数据文件中。 Tablespaces&#xff1a; 一次只…...

H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来

现今流媒体播放器的发展趋势将更加多元化和个性化。人工智能的应用将深入内容创作、用户体验优化等多个方面&#xff0c;带来前所未有的个性化体验。 EasyPlayer.js H.265流媒体播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#…...

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial&#xff08;单独导入&#xff09;&#xff0c;或者直接安装 三、对应设置 其他的操作与之前的版本相同…...

解决 npm xxx was blocked, reason: xx bad guy, steal env and delete files

问题复现 今天一位朋友说&#xff0c;vue2的老项目安装不老依赖&#xff0c;报错内容如下&#xff1a; npm install 451 Unavailable For Legal Reasons - GET https://registry.npmmirror.com/vab-count - [UNAVAILABLE_FOR_LEGAL_REASONS] vab-count was blocked, reas…...

leetcode 面试150之 156.LUR 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…...

Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案

在 Vue 中,动态地向 data 中添加新的属性是一个常见的需求,但它也可能引发一些问题,尤其是关于 响应式更新 和 数据绑定 的问题。Vue 的响应式系统通过 getter 和 setter 来追踪和更新数据,但 动态添加新属性 时,Vue 并不会自动为这些新属性创建响应式链接。 1. 直接向 V…...

Unity类银河战士恶魔城学习总结(P141 Finalising ToolTip优化UI显示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ UI部分暂时完结&#xff01;&#xff01;&#xff01; 本章节优化了UI中物品描述的显示效果&#xff0c;技能描述的显示效果 并且可以批…...

面试:请阐述MySQL配置文件my.cnf中参数log-bin和binlog-do-db的作用

大家好&#xff0c;我是袁庭新。星球里的小伙伴去面试&#xff0c;面试官问&#xff1a;MySQL配置文件my.cnf中参数log-bin和binlog-do-db的作用&#xff1f;一脸懵逼&#xff5e;不知道该如何回答。 在MySQL的配置文件my.cnf中&#xff0c;log-bin和binlog-do-db是与二进制日志…...

监控报警系统的指标、规则与执行闭环

随笔 从千万粉丝“何同学”抄袭开源项目说起&#xff0c;为何纯技术死路一条&#xff1f; 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 java 老矣&#xff0c;尚能饭否&#xff1f; 一骑红尘妃子笑&#xff0c;无人知是荔枝来! 有所依 我们如何知道系统交易…...