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

Linux系统之----进程优先级、调度与切换

在开启本篇文章的学习之前,我们先要熟悉如下两个事

1.概念

进程优先级指的是进程能得到某种资源的先后顺序,要理解好它与权限的关系,优先级是   能,拥有资源的先后顺序,权限是  能还是不能的问题

2.为什么要有优先级?

因为资源是有限的,本质就是资源少进程多!!!在竞争CPU资源!Linux的优先级在task_strect里面。

3.解剖优先级

我们随便撬开一个进程:

我们会发现有几个东西:UID、PRI和NI,那这两个都是什么呢?

答案是:
UID : 代表执行者的身份

PRI :代表这个进程可被执行的优先级,其值越小越早被执行

NI :代表这个进程的nice值
 

3.1 PRI(Priority)

定义:PRI代表进程的优先级,决定了操作系统调度进程的顺序。PRI值越小,进程的优先级越高。

特点:PRI是一个动态值,内核会根据进程的运行状态自动调整。

取值范围:Linux系统中,PRI的取值范围是0到139。其中,0到99是实时进程的优先级范围,100到139是普通进程的优先级范围。

PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

实际上,我们上文看到的是PRI(new)值,在这里PRI(old)固定为80,我们是通过修改NI值来改变进程优先级的!!

3.2 NI(Nice值)

定义:NI是进程的静态优先级修正值,用于调整进程的优先级。通过修改nice值,可以间接改变进程的优先级。

特点:NI值是一个静态值,通常由用户手动设置,内核一般不会主动修改。

取值范围:NI值的取值范围是-20到19,一共40个级别。正值表示降低优先级,负值表示提高优先级。

3.3 总结

1)优先级范围

在Linux系统中,普通用户进程的优先级范围是60到99,一共40个级别。数值越小,表示进程的优先级越高。默认情况下,进程的优先级是80。

2)原因

这个范围限制是为了保持系统调度的公平性,防止用户随意将进程的优先级设置得过高或过低,从而避免进程饥饿问题。(这也是为什么NI值设置在【-20,19】之间的原因

3)作用

实时进程优先:在Linux中,实时进程的优先级高于普通用户进程,因为实时进程需要即时响应,不受其他普通进程的影响。实时进程的优先级范围通常是0到99。

防止饥饿:通过限制普通进程的优先级范围,确保系统中的每个进程都有机会获得CPU资源,避免某些进程因优先级过低而长时间无法执行。

3.4 查看与修改 

 查看:可以通过ps -l命令查看进程的PRI和NI值。

 修改:可以使用nice命令在启动进程时设置NI值,或者使用renice命令动态调整正在运行的进程                的NI值。或者top命令,进入后按r,输入PID值和要更改的NI值。

4.概念补充

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。                 为了高效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰(进程之间是相互隔离的)

并行:     多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发:  多个进程在⼀个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称

           之为并发

5.进程切换

CPU上下文切换:其实际含义是任务切换, 或者CPU寄存器切换。当多任务内核决定运行另外的任务时, 它保存正在运行任务的当前状态, 也就是CPU寄存器中的全部内容。这些内容被保存在任务自己的堆栈中, 入栈工作完成后就把下⼀个将要运行的任务的当前状况从该任务的栈中重新装入CPU寄存器, 并开始下⼀个任务的运行, 这一过程就是context switch。

5.1 时间片

时间片:当代计算机都是分时操作系统,没有进程都有它合适的时间片(其实就是⼀个计数
器)。时间片到达,进程就被操作系统从CPU中剥离下来。换句话说,它指的是允许一个进程在CPU上连续运行的最长时间。在多任务操作系统中,时间片机制用于在多个进程或线程之间分配CPU资源,确保每个进程都有机会运行。
我们当前的系统,都是分时系统,每一个进程都有自己的时间片

5.2 函数返回值问题

首先我们要先明确一个点,CPU内,寄存器,就是一套存储空间,寄存器只有一套,属于CPU本身,但是,寄存器内部的数据,可以有很多。
好了,现在有哥们问:我们之前C语言写的函数,会有返回值,而返回值的本质就是函数内部的变量,而函数内部的变量,不是具有临时性吗?不是只在函数内部有效吗?不是有作用域吗?它是怎么返回的呢?
原因是它返回的是一份拷贝,那这个拷贝是在哪里呢?以1-100求和为例,我的sum是个临时变量,每次+=之后,都会将数据保存在寄存器上,函数调用完会将其返回值记录在寄存器里,这样返回值就会被外部函数获得。

6.O(1)调度

O(1)调度算法是Linux内核中的一种进程调度算法,因时间复杂度为常数级别而得名,与进程数量无关。其核心思想是通过维护特定的数据结构,快速选择下一个要运行的进程

数据结构如下:

O(1)调度器为每个CPU维护两个队列:active队列(存放时间片未用完的任务)和expired队列(存放时间片已耗尽的任务)。

每个队列按优先级分为多个数组,对应不同的优先级。优先级范围为0~139,其中0~99为实时进程优先级,100~139为普通进程优先级。

我们注意到圈圈里面都有一个queue[140],bitmap[5],不同的是上面蓝色的当前是 active队列,下面红色的是expired队列。一个圈又是一个结构体,我们不妨定义为struct q,那这里红圈和蓝圈实际上是一个结构体数组,写为struct q array[2],蓝圈为array[0],红圈为array[1]

6.1 queue[140]

实际上,它是由结构体数组指针构成的,写作 struct tasj_struct * ,之后由链表连接而成,所以还有一个struct list_head,从0到139,总共140个,【0,99】我们先不管,先只看【60,99】,之后按优先级进行调度,这样,CPU在调度的时候只需将各个数组打开,如果里面指针为空,那就下一个,直到找到不为空的位置,但是倘如我们的进程在最后一个,139的位置,那我们的CPU岂不是还要在遍历一遍数组?实际上,不需要!这里就要看上面的那个bitmap了!

6.2 bitmap

有人可能会好奇,为什么是5而不是别的数字,实际上,这是因为我们的Int是32位,32*5=160,而32*4=128,128不够139,所以我们确定【】里面为5,而这160比特位我们称之为位图!!

6.2.1 位图

位图由一堆0和1组成,比特位位置:数组中第几个队列,比特位内容:表明该队列是否为空,为1则不为空,说明当前对应位置上挂着进程呢!

这样一来,操作系统只需要看bitmap【5】,即可确定里面那个位置有优先级最高的进程,于是便可以进行调度了!

这里在补充说明一点:CPU调度的时候,是直接从active指针,找到对应的queue[140],而我们的新增进程以及时间片到了的进程,会被从CPU上剥离下来,并重新入队列,入的是过期队列!!!

而我们的新增进程也是在这个时候会根据优先度来调度,判断出入过期队列的哪一部分的!

还有一点值得提的是,CPU调度完之后,就会跑到过期队列中,所以当我们调度完所有进程之后,所有进程都跑到过期队列中!而一但active没有进程了,那么swap(&active,&expired),交换两个指针的内容,继续调度!

6.3 总结

在系统当中查找⼀个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成
本增加,我们称之为进程调度O(1)算法!

相关文章:

Linux系统之----进程优先级、调度与切换

在开启本篇文章的学习之前,我们先要熟悉如下两个事 1.概念 进程优先级指的是进程能得到某种资源的先后顺序,要理解好它与权限的关系,优先级是 能,拥有资源的先后顺序,权限是 能还是不能的问题 2.为什么要有优先级…...

Web3钱包开发功能部署设计

Web3钱包开发功能部署设计全景指南(2025技术架构与实战) ——从核心模块到多链生态的完整解决方案 一、核心功能模块设计 1.1 资产管理体系 Web3钱包的核心功能围绕资产存储、交易验证、多链兼容展开: • 密钥管理:…...

【含文档+PPT+源码】基于SpringBoot的开放实验管理平台设计与实现

项目介绍 本课程演示的是一款基于SpringBoot的开放实验管理平台设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统…...

小刚说C语言刷题——1317正多边形每个内角的度数?

1.题目描述 根据多边形内角和定理,正多边形内角和等于:( n-2 ) 180∘ ( n 大于等于 3且 n 为整数) 请根据正多边形的边数,计算该正多边形每个内角的度数。(结果保留1位小数&#x…...

Spring—AOP

AOP是在不惊动原有的代码的基础上对功能进行增强操作 连接点:JoinPoint,可以被AOP控制的方法 通知:Advice,增强的逻辑,共性功能 切入点:PointCut,匹配连接点的条件,表明连接点中哪…...

算法训练营第二天| 209.长度最小的子数组、59.螺旋矩阵II、区间和

209.长度最小的子数组 题目 思路与解法 **第一想法&#xff1a;**无 carl的讲解&#xff1a; 滑动窗口 class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:ij0lens len(nums)sum 0res lens 1while j < lens:# for m in range(i, j1)…...

【C++ 真题】P3456 [POI2007] GRZ-Ridges and Valleys

[POI2007] GRZ-Ridges and Valleys 题面翻译 题目描述 译自 POI 2007 Stage 2. Day 0「Ridges and Valleys」 给定一个 n n n \times n nn 的网格状地图&#xff0c;每个方格 ( i , j ) (i,j) (i,j) 有一个高度 w i j w_{ij} wij​。如果两个方格有公共顶点&#xff0c…...

Vue3 中 computed的详细用法

Vue 3 中 computed 是一个非常重要的响应式 API&#xff0c;它是基于其依赖项的值来计算得出的值&#xff0c;当依赖项发生变化时&#xff0c;计算属性会自动更新 基本用法 在选项式 API 中&#xff0c;computed 通常作为一个选项直接在组件的选项对象中定义。例如 <temp…...

位带和位带别名区

位带区域和位带别名区域 位带区域&#xff08;Bit-banding&#xff09;是一种技术&#xff0c; 允许开发者直接访问和修改内存中的单个位。 这种技术在某些微控制器&#xff08;如ARM Cortex-M系列&#xff09;中特别有用&#xff0c;因为它可以简化对寄存器位的访问和修改。 …...

DRF凭什么更高效?Django原生API与DRF框架开发对比解析

一、原生 Django 开发 API 的局限性 虽然 Django 可以通过 JsonResponse 和视图函数手动构建 API&#xff0c;但存在以下问题&#xff1a; 手动序列化与反序列化 需要手动将模型实例转换为 JSON&#xff0c;处理复杂数据类型&#xff08;如嵌套关系&#xff09;时代码冗长且易…...

Agent智能体应用详解:从理论到实践的技术探索

一、Agent智能体是什么&#xff1f; 1. 核心定义 Agent智能体是能够感知环境、自主决策并执行动作以实现目标的软件实体。其核心特征包括&#xff1a; 自主性&#xff1a;无需外部指令持续运行。 反应性&#xff1a;实时响应环境变化。 目标导向&#xff1a;基于预设或学习…...

Windows下使用 VS Code + g++ 开发 Qt GUI 项目的完整指南

&#x1f680; 使用 VS Code g 开发 Qt GUI 项目的完整指南&#xff08;Windows MSYS2&#xff09; 本指南帮助你在 Windows 下使用 VS Code g CMake Qt6 快速搭建 Qt GUI 项目&#xff0c;适合熟悉 Visual Studio 的开发者向跨平台 VS Code 工具链迁移。 &#x1f6e0;️…...

arm64适配系列文章-第三章-arm64环境上mariadb的部署

ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...

YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】

1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强&#xff0c;显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中&#xff0c;并在物体检测及其他视觉任务中设立了新的性能标准&#xff0c;展现了广泛的应用潜力。 关于CPA-E…...

编译 C++ 报错“找不到 g++ 编译器”的终极解决方案(含 Windows/Linux/macOS)

前言 在使用终端编译 C 程序时&#xff0c;报错&#xff1a; 或类似提示&#xff0c;意味着你的系统尚未正确安装或配置 g 编译器。本篇将从零手把手教你在 Windows / Linux / macOS 下安装并配置 g&#xff0c;适用于新手或 C 入门阶段的你。 什么是 g&#xff1f; g 是 GN…...

Spring 过滤器详解:从基础到实战应用

Spring 过滤器详解&#xff1a;从基础到实战应用 引言 在 Spring 框架中&#xff0c;过滤器&#xff08;Filter&#xff09;是处理 HTTP 请求和响应的重要组件。它们为开发者提供了一种在请求到达控制器之前或响应返回客户端之前进行操作的机制。本文将深入探讨 Spring 中常见…...

达梦并行收集统计信息

达梦收集统计信息速度如何&#xff1f; 答&#xff1a;1分钟1G 大库收集起来可能比较慢&#xff0c;想并行收集需要一些条件 3个参数先了解一下 我把max_parallel_degree改为16 相关说明可以看一下 对一个3G的表收集 收集方法 DBMS_STATS.GATHER_TABLE_STATS( TEST,T1,…...

AOSP CachedAppOptimizer 冻结方案

背景 Android 一直面临一个核心难题&#xff1a;如何优化进程对有限系统资源&#xff08;如 CPU、电量&#xff09;的使用&#xff0c;同时保证用户体验。 当进程进入后台后&#xff0c;它们虽不再贡献用户体验&#xff0c;却仍可能消耗资源。传统的杀后台方案虽然节省资源&a…...

JVM-类加载机制

类加载 前言&#xff1a;为什么需要了解类加载&#xff1f;什么是类加载&#xff1f;生命周期概览类加载过程详解3.1 加载 (Loading)3.2 连接 (Linking)3.2.1 验证 (Verification)3.2.2 准备 (Preparation)3.2.3 解析 (Resolution) 3.3 初始化 (Initialization)3.3.1 <clini…...

【小白福音】SFTP限制权限登录

下面以在 Linux 环境(例如 Ubuntu 或 CentOS)上配置 SFTP chroot 为例,给出详细的步骤说明。即使你不熟悉服务器运维,也可以按照以下步骤进行配置,保证指定的 SFTP 用户只能访问预设目录,而无法触碰其他文件。 目录 一、配置SFTP权限1. 创建专用 SFTP 用户和用户组2. 搭建…...

海量数据笔试题--Top K 高频词汇统计

问题描述&#xff1a; 假设你有一个非常大的文本文件&#xff08;例如&#xff0c;100GB&#xff09;&#xff0c;文件内容是按行存储的单词&#xff08;或其他字符串&#xff0c;如 URL、搜索查询词等&#xff09;&#xff0c;单词之间可能由空格或换行符分隔。由于文件巨大&…...

Postman设置环境变量与Token

设置环境变量 设置某个Collection下的变量...

项目中数据结构为什么用数组,不用List

总结 1&#xff0c;从内存和性能角度&#xff0c;数组占用更小的内存&#xff08;&#xff09;&#xff0c;访问性能更高&#xff08;&#xff09; 分配效率&#xff1a;数组在内存中是连续分配的一块固定空间 访问速度&#xff1a;直接操作内存&#xff0c;数组的读写操作是…...

Linux常见指令介绍下(入门级)

1. head head就和他的名字一样&#xff0c;是显示一个文件头部的内容&#xff08;会自动排序&#xff09;&#xff0c;默认是打印前10行。 语法&#xff1a;head [参数] [文件] 选项&#xff1a; -n [x] 显示前x行。 2. tail tail 命令从指定点开始将文件写到标准输出.使用t…...

从Kafka读取数据

用Spark-Streaming从Kafka读取数据 在大数据处理领域&#xff0c;Spark-Streaming和Kafka都是明星技术。今天咱们就来聊聊怎么用Spark-Streaming从Kafka读取数据并做处理&#xff0c;就算你是小白&#xff0c;也保证能看懂&#xff01;先讲讲从Kafka获取数据的两种方式。早期有…...

硬件工程师面试常见问题(7)

第三十一问&#xff1a;RTC电路&#xff0c;电池寿命估算 上图可知&#xff0c;该电路有两个供电一个是电池供电&#xff0c;一个是其他供电&#xff0c;已知电池大小为120mAh&#xff0c;该电路在电池供电下吃3uA的电流&#xff0c;计算 120*&#xff08;10^3&#xff09;/ 3…...

二分小专题

P1102 A-B 数对 P1102 A-B 数对 暴力枚举还是很好做的&#xff0c;直接上双层循环OK 二分思路:查找边界情况&#xff0c;找出最大下标和最小下标&#xff0c;两者相减1即为答案所求 废话不多说&#xff0c;上代码 //暴力O(n^3) 72pts // #include<bits/stdc.h> // usin…...

Explain详解与索引最佳实践

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句&#xff0c;分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字&#xff0c;MySQL 会在查询上设置一个标记&#xff0c;执行查询会返回执行计划的信息&#xff0c;而不是执行这条SQL 注意…...

【Qt6 QML Book 基础】07:布局项 —— 锚定布局与动态交互(附完整可运行代码)

引言 在 QML 界面开发中&#xff0c;** 锚定布局&#xff08;Anchors&#xff09;** 是实现响应式设计的核心机制。通过声明式的锚定规则&#xff0c;开发者无需手动计算坐标&#xff0c;即可让元素与父容器或其他元素保持动态位置关联。本文结合官方示例&#xff0c;详细解析…...

rocky9.4部署k8s群集v1.28.2版本(containerd)(纯命令)

文章目录 前言三个节点的主机名 所有节点操作主机名和ip解析关闭交换分区&#xff0c;关闭防火墙&#xff0c;关闭selinux更换阿里云yum源时间同步修改内核参数修改系统最大打开文件数开启bridge网桥过滤&#xff0c;加载br_netfilter模块&#xff0c;加载配置文件安装ipset及i…...

Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)

Crawl4AI 部署安装及 n8n 调用&#xff0c;实现自动化工作流&#xff08;保证好使&#xff09; 简介 Crawl4AI 的介绍 一、Crawl4AI 的核心功能 二、Crawl4AI vs Firecrawl Crawl4AI 的本地部署 一、前期准备 二、部署步骤 1、检查系统的网络环境 2、下载 Crawl4AI 源…...

onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本

8.3.3 修复内容 文档编辑器 • 修复从右到左&#xff08;RTL&#xff09;段落的计算问题 (DocumentServer#2590) • 修复从右到左段落中"项目符号/编号/多级列表"样式缩略图的显示问题 • 修复从右到左段落中编号列表&#xff08;项目符号&#xff09;的显示问题 (…...

rabbitmq安装项目集成

使用Docker来安装 1.1.下载镜像 docker pull rabbitmq:3-management 1.2.安装MQ docker run \-e RABBITMQ_DEFAULT_USER=root \-e RABBITMQ_DEFAULT_PASS=123123 \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 15672:RabbitMQ提供…...

济南国网数字化培训班学习笔记-第二组-3节-电网工程建设项目部门

电网工程建设项目部 组成 监理项目部 履行监理合同&#xff0c;监理单位派驻&#xff1a;负责合同管理&#xff0c;审查&#xff0c;见证&#xff0c;旁站&#xff0c;巡视&#xff0c;验收&#xff0c;控制进度&#xff0c;安全&#xff0c;质量&#xff0c;协调各方 造价…...

JDK(java)安装及配置 --- app笔记

JDK官方下载地址&#xff1a;Java Downloads | Oracle 安装好后&#xff0c;配置 “环境变量”&#xff1a; 新建JAVA_HOME变量&#xff0c;值为 jdk 安装 根目录&#xff08;C:\Program Files\Java\jdk-24&#xff09; 在path变量最后面&#xff0c;添加 %JAVA_HOME% 新建 CLA…...

【前端】【面试】在前端开发中,如何优化 CSS 以提升页面渲染性能?

题目&#xff1a;在前端开发中&#xff0c;如何优化 CSS 以提升页面渲染性能&#xff1f; 关键词总结 关键词说明选择器优化避免通配符、减少层级深度、防止后代选择器过度嵌套样式规则优化合并重复规则、慎用高成本属性加载与渲染优化关键 CSS 优先加载、合理使用媒体查询文…...

python的mtcnn检测图片中的人脸并标框

python的mtcnn检测图片中的人脸并标框&#xff0c;标记鼻尖位置 import cv2 from mtcnn import MTCNN# 初始化 MTCNN 检测器 # stages&#xff1a;指定检测阶段 # 指定运行设备为CPU detector MTCNN(stages"face_and_landmarks_detection", device"CPU:0"…...

矩阵系统源码搭建账号分组功能开发全流程解析,支持OEM

在短视频矩阵运营场景下&#xff0c;企业和创作者往往管理着数十甚至上百个不同平台的账号&#xff0c;传统的统一管理模式效率低下&#xff0c;难以满足精细化运营需求。矩阵系统的账号分组功能通过对账号进行分类整合&#xff0c;实现差异化管理与精准化操作。本文将从功能需…...

跟着deepseek学golang--认识golang

文章目录 一、Golang核心优势1. 极简部署方式生产案例​​&#xff1a;依赖管理​​&#xff1a;容器实践​​&#xff1a; 2. 静态类型系统​​类型安全示例​​&#xff1a;性能优势​​&#xff1a;​​代码重构​​&#xff1a; 3. 语言级并发支持​​GMP调度模型实例​​&…...

如何创建极狐GitLab 议题?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 创建议题 (BASIC ALL) 创建议题时&#xff0c;系统会提示您输入议题的字段。 如果您知道要分配给议题的值&#xff0c;则可…...

制造工厂如何借助电子看板实现高效生产管控

在当今高度竞争的制造业环境中&#xff0c;许多企业正面临着严峻的管理和生产挑战。首先&#xff0c;管理流程落后&#xff0c;大量工作仍依赖"人治"方式&#xff0c;高层管理者理论知识薄弱且不愿听取专业意见。其次&#xff0c;生产过程控制能力不足&#xff0c;导…...

QLExpress 深度解析:构建动态规则引擎的利器

QLExpress 深度解析:构建动态规则引擎的利器 在现代业务系统中,“规则变更快、逻辑复杂、发布要求高”已成为常态。传统硬编码已无法满足这种需求。本文以阿里巴巴开源的轻量级表达式引擎 QLExpress 为例,从实际应用、核心结构到落地建议,系统解析其强大能力和设计哲学。 …...

Java Thread类深度解析:构造方法与核心方法全攻略

一、Thread类的作用与线程模型 Thread类是Java多线程编程的核心&#xff0c;每个线程都与一个唯一的Thread对象关联。JVM通过Thread对象管理线程的整个生命周期。理解以下核心概念至关重要&#xff1a; 任务定义&#xff1a;通过run()方法描述线程要执行的任务 线程创建&…...

nodejs导入文件模块和导入文件夹

在 Node.js 中&#xff0c;导入文件模块和导入文件夹的方式略有不同&#xff0c;但都很常见。下面是详细说明&#xff1a; ✅ 一、导入文件模块 1. CommonJS&#xff08;.js&#xff09;方式&#xff1a; // 假设有个模块文件叫 utils.js const utils require(./utils); // …...

信息系统项目管理工程师备考计算类真题讲解八

一、风险管理 示例1&#xff1a;EMV 解析&#xff1a;EMV(Expected Monetary Value)预期货币价值。一种定量风险分析技术。通过考虑各种风险事件的概率及其可能带来的货币影响&#xff0c;来计算项目的预期价值。 可以用下面的较长进行表示&#xff1a; 水路的EMV:7000*3/4(7…...

UML 活动图深度解析:以在线购物系统为例

目录 一、UML 活动图的基本构成要素 二、题目原型 三、在线购物系统用户购物活动图详细剖析 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;节点分析 三、注意事项 四、活动图绘画 五、UML 活动图在软件开发中的关键价值 六、总结 在软件开发与系统设计领…...

Redis--预备知识以及String类型

目录 一、预备知识 1.1 基本全局命令 1.1.1 KEYS 1.1.2 EXISTS 1.1.3 DEL 1.1.4 EXPIRE 1.1.5 TTL 1.1.6 TYPE 1.2 数据结构以及内部编码 1.3 单线程架构 二、String字符串 2.1 常见命令 2.1.1 SET 2.1.2 GET 2.1.3 MGET 2.1.4 MSET 2.1.5 SETNX 2.2 计数命令 2.2.1 INCR 2.2.2…...

电子削铅笔刀顺序图详解:从UML设计到PlantUML实现

题目&#xff1a;为电子削铅笔刀建立一个顺序图和一个通信图。图中的对象包括操作者、铅笔、插入点(也就是铅笔插入铅笔刀的位置)、马达和其他元素。包括哪些交互消息?有那些激活?如何在图中表示出自身调用。 一、顺序图概述 顺序图&#xff08;Sequence Diagram&#xff09…...

负环-P3385-P2136

通过选择标签&#xff0c;洛谷刷一个类型的题目还是很方便的 模版题P3385 P3385 【模板】负环 - 洛谷 Tint(input())def bellman(n,edges,sta):INFfloat(inf)d[INF]*(n1)d[sta]0for i in range(n-1):for u,v,w in edges:ncostd[u]wif ncost<d[v]:d[v]ncostfor u,v,w in e…...

《数据结构之美--栈和队列》

一&#xff1a;引言&#xff1a; 上次我们学习了双向链表的实现&#xff0c;这次我们来学习两个新的数据结构&#xff0c;因为比较简单&#xff0c;就放在一块学习。 二&#xff1a;栈的实现 1. 栈的结构与性质 只凭文字来描述的话不够生动&#xff0c;下面我们就以图画的形…...