Linux系统编程:进程状态和进程优先级/nice
目录
一,相对于OS的进程状态
1.1运行状态
1.2阻塞状态
1.3挂起状态
二,并发执行与进程切换
2.1,CPU并发执行
2.2进程切换
三,Linux内核管理进程状态的方法
3.1查看进程状态
3.2R状态
3.3S状态
3.4D状态
3.5T状态
3.6X状态
3.7Z状态
3.8孤儿进程
四,进程优先级
4.1优先级理解
4.2查看和调整优先级
4.3如何修改优先级
五,Linux内核调度算法
一,相对于OS的进程状态
什么是相对于OS或者外设的进程状态呢?
就是进程的状态与外设建立联系的,后面我们会提到进程的R,S,T...状态,是为了与这个划分;
1.1运行状态
进程是以运行队列的组织方式来通过调度器进行轮流调度的;调度器会将最前面的进程占用CPU;
占用CPU的进程就是正在运行的程序,而后面排队的是随时准备被调度的进程;这些处于运行队列的进程都处于运行态;
结论:并不是之后占用CPU正在执行的程序才叫运行态,只要是在运行队列中的都交运行态;
1.2阻塞状态
OS管理硬件同样是遵循先描述在组织的原则,所以这些与硬件联系的进程也需要队列来维护,除了运行队列外还需要一个阻塞队列;
为什么需要阻塞队列?
因为外设的速度是很慢的,CPU的运行速度是非常快的,也就是处于运行队列中的进行在一段时间可以执行多次,但是外设可能就反应不过来,所以这个时候进程就需要的等待外设,所以就需要一个阻塞队列在维护等待状态的与外设联系的进程;
1.3挂起状态
挂起状态通常是出现在内存紧张不足的情况下,我们的进程代码和数据,正常情况下下加载到内存中的,但是如果内存资源紧张,OS就会把一些进程的代码和数据再放回到磁盘中,这些置换的进程此时的状态就叫做挂起状态;
出现挂起状态的原因
1.出现挂起状态的原因是内存资源紧张,也就是内存不足,内存里存在着大量的进程,所以一种原因是进程太多,还可能是阻塞进程太多,导致进程没有运行但仍然占用内存;
2.(了解)我们内存中存在一个交换分区,这个分区就是专门处理溢出的资源---硬盘驱动器的一部分,用作交换内存,即RAM的溢出空间;
还需要注意的点:
1.挂起进程并不需要让你知道,就像你玩那个银行存钱,你存进去的钱不知道被用于什么地方;但是只要你需要的时候,银行就会给你,挂起状态的进程,如果准备调度时,OS会把数据和代码块从磁盘上置换回来;
2.挂起状态的进程的PCB可能会处于挂起队列,等待被唤醒或恢复执行;
二,并发执行与进程切换
调度器将进程轮流调度到CPU上运行,这个过程并不是将一个进程运行完毕才放下的,
原因:
1.如果当前进程是死循环,那么将永远不会结束,如果按照执行完才放下的策略,后面的进程将永远无法被调度;
2.为了保证进程的公平性,每个进程都会占用一个时间片,也就是占用CPU一个时间片的时间就会被放下来,让后面的进程运行,这样就保证了处于运行队列中的每一个进程都有机会被CPU运行;
2.1,CPU并发执行
CPU的执行速度是很快的,在一段时间,运行队列的所有进程都会被执行一遍,多个进程轮流被一个CPU调度,这个就叫做CPU并发执行;
2.2进程切换
每个进程在时间片到达之后,会被调度器从CPU上放下去,让后面的进程放到CPU上运行,这个切换的过程就叫做进程切换;
三,Linux内核管理进程状态的方法
先看一下Linux内核中的状态有哪些?
/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
3.1查看进程状态
指令:ps -ajx
3.2R状态
R(running)即运行态:处于运行队列或正在运行的进程;
3.3S状态
S(Sleeping)睡眠状态:这个睡眠是浅度睡眠,也就是可以被唤醒的,通常是等待某一事件的完成;
---->其实就相当于是阻塞状态(与硬件建立联系,等待硬件回应)
我们来验证下:
进程处于R运行态;
我们加上printf试试
我们会发现此时处于S状态,关键就在于此进程与硬件发生交互,可能处于阻塞队列中,也就是可能会处于可中断睡眠状态来等待硬件回应;
3.4D状态
D(Deep Sleep):磁盘休眠状态,也叫做不可中断休眠或不可唤醒状态;这个进程通常是等待IO的完成,但是又等不到IO的完成;
下面 为了方便理解,讲一个故事:
比方说我们现在编译了一段代码,需要将1GB的文件写入磁盘中,内存需要跟磁盘建立联系,磁盘在被写入之前需要判断该行为是否可以被执行,比方说现在磁盘中的空间不足1GB,那么这个请求就应该被驳回,这个过程中我们的内存需要先对磁盘说:“我打算写入1GB的内容,你看看可不可以” 磁盘回复:“那你稍等一下,我看看自己的空间是否足够” 当该信息确认后,然后磁盘回复进程:“我当前空间足够,可以执行” 。然后进程才会通过其对应的代码和数据来将1GB写入磁盘。 所以这个过程有发起也有返回,内存像磁盘申请,磁盘完成后将结果返回给内存,但是这个过程是需要等待的!!
假设当前有大量的进程处于阻塞队列,此时内存不够了,因此操作系统需要杀死一部分进程来保证运行 。当系统压力很大时,依靠内存的辗转腾挪解决不了时,操作系统只能想办法杀死他认为不太重要的进程!!
内存在向磁盘发出请求的时候,在磁盘还没回复是否可行的时候该进程就被操作系统杀死了,所以磁盘想要回复的时候发现该进程不在了,所以就懵圈了。当磁盘想要回应的时候却发现那个等待自己的进程没有了,那么现在写入失败了怎么办?我是应该继续尝试呢,还是丢掉呢??此时不同的操作系统有不同的做法。
比如是在银行,某些数据丢失导致损失了几个亿!!这个时候法官 叫来了 操作系统、进程、磁盘 三个人,来这个过程应该是谁的错,第一嫌疑人是操作系统,因为操作系统杀进程了,操作系统说:“请问我是否履行了自己的职责,我是否是在比较极端的情况下去杀进程的,我能做的最大努力就是保证操作系统不挂掉!!如果我有错,那我下次再遇到这种情况??我还做不做了?就算我不杀进程,导致操作系统挂了,他数据该丢还是会丢,还会影响其他进程,这个责任又该谁负责呢??” 法官觉得操作系统说得有道理,于是又把矛头转向了第二嫌疑人磁盘,因为磁盘在写入失败的时候擅自把数据丢失了。磁盘说:“这不怪我,我就是个跑腿的,我在写入的时候就告诉他可能会失败了,所以我让他在那里等我的结果,可是他人不见了,而是丢失是因为我还有其他工作得做,如果我有错的话,那我们是不是得把磁盘所有逻辑都改了???”法官觉得磁盘说的也有代理,于是又把矛头转向了进程,此时进程扑通一声跪了下来说:“我是被杀的,我怎么能有错呢?”所以凡是存在争议很大的地方,大部分都是因为制度设置的不合理。所以法官说,你们都回去吧,我把操作系统改一改——>让一些进行在磁盘写入完毕期间,这个进程不能被任何人杀掉,其实就是不接受任何响应,但是D状态不多见因为如果有很多说明系统已经临近崩溃了!!
3.5T状态
T(停止状态):OS可以发送信号SIGSTOP信号来停止进程,这个进程是可以通过OS发送信号SIGCONT继续进程的;
暂停和睡眠的区别:暂停是OS发送信号暂时停止进程运行的,而睡眠是进程等待某事件完成;
指令:kill -l
这些都是信号,9是刹进程,18是继续开始进程,19是停止进程;
T状态存在的意义:可能是需要等待某种资源,或者是我们单纯不想让该进程运行!!
应用场景就是gdb,当程序运行起来的时候遇到了我打的一个断点,然后就停下来了,这是这个过程就可以被应用于gdb这个进程在控制被调试的这个进程!
3.6X状态
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
3.7Z状态
Z(Zombie):僵尸状态,僵尸即人死僵硬无法动弹,进程层面理解就是进程结束了,然后没有后续工作进程(回收资源);
我们来验证一下:
前5秒
后5秒
为什么会存在僵尸状态?
一个进程进行完并不是直接把资源释放,而是要暂时维持状态一段时间-->因为父进程要关心子进程的状态;子进程是父进程创建的,创建他的原因就是让他帮父进程完成某项任务,所以事情完成的如何,进度,最后是要汇报给子进程的;
什么时候会发生僵尸状态?
子进程先父进程结束,而父进程并没有回收子进程的资源,这个时候子进程就会保持僵尸状态等待父进程回收;
如果父进程到了最后也不回收子进程,是不是就会造成泄露?
-->是的,子进程不被回收,那么PCB就会一直存在维护,占用内存,就会造成资源浪费;
3.8孤儿进程
孤儿进程与僵尸进程是反着的,孤儿进程发生的条件是父进程比子进程先结束;
孤儿进程怎么处理呢?
孤儿进程无法被父进程正常回收,就会被系统进程领养,
Ctrl+c无法终止异常进程,底层原理是什么?
ctrl+c的原理是一瞬间父进程被Bash进程回收,所以子进程也就同时在一瞬间被父进程回收掉;
但是如果子进程处于孤儿状态,那么他的PPID就不再是原来的父进程,而是系统进程(PID为1);这时Ctrl+c将不会终止子进程;
四,进程优先级
4.1优先级理解
为什么要有优先级?
因为资源有限,多个进程之间是竞争的,所以先后顺序是肯定存在的,优先级高的先运行,这将大大的改善系统性能;
OS对优先级的调整是什么?
1.IO操作相关调整:在IO完成后会被适当的提高优先级,因为IO操作通常会让进程处于阻塞状态,当IO完成后提高优先级,能让进程优先尽快处理,提高整体效率;
2.时间片相关调整:进程用完时间片后仍未完成,系统可能会降低其优先级,给其他进程更多机会,避免一个进程长时间占用CPU,保证系统的公平性和响应性;
4.2查看和调整优先级
指令:ps -l
与优先级有关是PRI和NI字段;
PRI(priotity)即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高
NI(nice)其表示进程可被执行的优先级的修正数值
PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
nice其取值范围是-20至19即[-20,19],一共40个级别。
4.3如何修改优先级
优先级=PRI+NI;
PRI是不可修改的都是80但是我们可以修改nice值,
有两种方法:
一,
1.输入指令top
2,按r
3.输入进程的PID
4.填入nice值
二,
使用renice命令
指令:renice (nice值) -p (进程PID)
五,Linux内核调度算法
1.需要维护两个队列按照顺序运行,一个是运行队列,一个是等待队列;时间片到了之后就会转到等待队列;
2.同等优先级的进程遵循先来后到原则;
3.需要维护一个位图,来确定位置
——>因为优先级有各种各样的,比方说在100的位置有2个进程,在133的位置有2个进程,但是我们并不能马上知道这几个地方有进程,而是只能通过遍历数组的方式来一个个查看。最后我们最后当数组遍历到结尾的时候才能确定队列位空
用位图大O(1) 调度算法优化
——>只有100-139一共40个级别,我只需要用5个字节一共40个比特位来标记是否存在进程即可,这样我们就可以通过位运算的方法快速找到 队列中存在进程的位置。 最后当位图位0的时候,就说明队列位空了!!
相关文章:
Linux系统编程:进程状态和进程优先级/nice
目录 一,相对于OS的进程状态 1.1运行状态 1.2阻塞状态 1.3挂起状态 二,并发执行与进程切换 2.1,CPU并发执行 2.2进程切换 三,Linux内核管理进程状态的方法 3.1查看进程状态 3.2R状态 3.3S状态 3.4D状态 3.5T状态 3.6X状态 3.7Z状态 3.8孤儿进程 四,进程优先级 …...
【算法】数论基础——唯一分解定理(算术基本定理)python
目录 定义进入正题热身训练实战演练总结 定义 唯一分解定理:也叫做算数基本定理: 任意一个大于1的整数N,都可以唯一分解为若干个质数的乘积 换句话说,任何大于1的整数n可以表示为: 例如: 30 2^1 * 3^1 * 5^1 100 2^2…...
图形化数据报文转换映射工具
目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代,数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛,格式多样,常见的数据格式包括XML(可扩展标记语言)和JSON&a…...
性能优化案例:通过合理设置spark.shuffle.memoryFraction参数的值来优化PySpark程序的性能
在PySpark中,合理调整spark.shuffle.memoryFraction参数可以有效优化Shuffle阶段的性能,尤其是在存在大量磁盘溢出的场景下。 通过合理设置spark.shuffle.memoryFraction并结合其他优化手段,可显著减少Shuffle阶段的磁盘I/O,提升P…...
[C]基础9.深入理解指针(1)
博客主页:算法歌者本篇专栏:[C]您的支持,是我的创作动力。 文章目录 0、总结1、内存和地址1.1 内存1.2 理解编址 2、指针变量和地址2.1 取地址操作符(&)2.2 指针变量2.3 解引用操作符(*)2.4…...
网络模型简介:OSI七层模型与TCP/IP模型
计算机网络是现代信息社会的基石,而网络通信的基础在于理解网络模型。网络模型是对通信过程的抽象,它帮助我们理解数据从源到目的地的传输过程。常见的网络模型有 OSI 七层模型 和 TCP/IP 模型,这两种模型在理论和实践中都起着重要作用。 一、…...
第100+35步 ChatGPT学习:时间序列EMD-ARIMA-RF模型 vol. 2
基于Python 3.9版本演示 一、写在前面 上一节,我们学了EMD-ARIMA-RF模型去做预测。 这一节开始,我们尝试使用多项式回归矫正。 二、EMD&RF-ARIMA组合策略 该组合策略主要是将传统的经验模态分解(EMD)方法和现代的机器学习技…...
Adobe的AI生成3D数字人框架:从自拍到生动的3D化身
一、引言 随着人工智能技术的发展,我们见证了越来越多创新工具的出现,这些工具使得图像处理和视频编辑变得更加智能与高效。Adobe作为全球领先的创意软件公司,最近推出了一项令人瞩目的新技术——一个能够将普通的二维自拍照转换成栩栩如生的三维(3D)数字人的框架。这项技…...
2025美赛数学建模MCM/ICM选题建议与分析,思路+模型+代码
2025美赛数学建模MCM/ICM选题建议与分析,思路模型代码,详细更新见文末名片 一、问题A:测试时间:楼梯的恒定磨损(Archaeological Modeling) 适合专业:考古学、历史学、数学、机械工程 难度:中等…...
golang中的包管理-上--简介
Go语言中的包(Package)是组织和管理代码的基本单元,通过合理地使用包,可以提高代码的复用性、可维护性和可读性。 包的基本概念和定义 在Go语言中,每个源代码文件都属于一个包。包的声明位于文件的最顶部ÿ…...
深入了解 HTTP 头部中的 Accept-Encoding:gzip、deflate、br、zstd
在现代Web开发中,性能优化是至关重要的一部分。HTTP协议中的Accept-Encoding头部正是为性能提升提供了一个非常有效的方式,它告知服务器客户端能够理解并接收哪些压缩算法的响应内容。在这篇博客中,我们将详细探讨Accept-Encoding头部的作用&…...
QModbusTCPClient 服务器断开引起的程序崩溃
最近使用QModbusTCPClient 与一套设备通信,有一个QTimer频繁的通过读取设备寄存器。程序运行良好,但是有个问题:正常进行中设备断电了,整个程序都会崩溃。解决过程如下: 1.失败方案一 在QModbusTCPClient的errorOccu…...
Unity|小游戏复刻|见缝插针2(C#)
控制针的运动 新建一个Pin脚本 将Pin脚本拖到针Pin的下面 保存代码 using UnityEngine;public class Pin : MonoBehaviour {public float speed 5;private bool isFly false;private bool isReach false;private Transform startPosition;// Start is called once bef…...
数据结构——堆(C语言)
基本概念: 1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。 2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最…...
ML基础2-python中的可视化1:matplotlib
承接我的上一篇博客: https://blog.csdn.net/weixin_62528784/article/details/145329298?spm1001.2014.3001.5501 在机器学习的过程中,我们需要掌握大量的Python包,常用的有pandas和numpy这些基本数据管理的包(在后续更新中我会讲解)与mat…...
SpringBoot--基本使用(配置、整合SpringMVC、Druid、Mybatis、基础特性)
这里写目录标题 一.介绍1.为什么依赖不需要写版本?2.启动器(Starter)是何方神圣?3.SpringBootApplication注解的功效?4.启动源码5.如何学好SpringBoot 二.SpringBoot3配置文件2.1属性配置文件使用2.2 YAML配置文件使用2.3 YAML配置文件使用2.…...
9.C++文件与流
C文件与流 在 C 中,文件和流是用于处理输入输出操作的重要概念,以下是关于它们的详细讲解: 流的概念 定义:流是一种抽象概念,它代表了数据的序列。在 C 中,流可以是输入流(从外部源如文件或键…...
CSRF 跨站请求伪造漏洞
原理 当一个网站A使用Cookie,存储Session或Token来用于单点登录和权限操作时。浏览器将Cookie存储到浏览器中。当用户在访问另一个网站V时,黑客可以通过伪造表单,向网站A发送修改重要信息(如密码)、支付等操作,浏览器会自动携带C…...
从ABCD谈人工智能对软件开发的影响(2)
接“造词圈子割韭菜”-从ABCD谈人工智能对软件开发的影响(1) (六)分步解析之二:组织价值(业务用例图) 这一步本来建模难度也只有,AI的助力分数可以做到30分。 ★很多领域驱动设计…...
我谈《概率论与数理统计》的知识体系
学习《概率论与数理统计》二十多年后,在廖老师的指导下,才厘清了各章之间的关系。首先,这是两个学科综合的一门课程,这一门课程中还有术语冲突的问题。这一门课程一条线两个分支,脉络很清晰。 概率论与统计学 概率论…...
第 10 课 Python 内置函数
1. 什么是内置函数 Python解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能就是内置函数。Python解释器启动以后,内置函数也生效了,可以直接拿来使用。 内置函数是解释器的一部分,它随着解释器的启动而生效;标准库函数是…...
MySQL中的读锁与写锁:概念与作用深度剖析
MySQL中的读锁与写锁:概念与作用深度剖析 在MySQL数据库的并发控制机制中,读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁(共享锁)概念 读锁,也称为…...
Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放
Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
导出地图为图像文件
使用函数可以将地图或布局视图的内容导出为图像文件. 操作方法: 1.打开目标地图文档 2.导入arcpy.mapping模块 import arcpy.mapping as mapping 3.引用当前活动地图文档,把该引用赋值给变量 mxd mapping.MapDocument() 4.获取地图文档中的数据框列表,查找目标数据框,并…...
【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道
文章目录 Linux基础入门:探索操作系统的内核与命令一、Linux背景与发展历史1.1 Linux的起源与发展1.2 Linux与Windows的对比 二、Linux的常用命令2.1 ls命令 - "List"(列出文件)2.2 pwd命令 - "Print Working Directory"(…...
如何在gitee/github上面搭建obsidian的图床
在搭建图床之前我们需要知道图床是一个什么东西,图床顾名思义就是存放图片的地方,那么我们为什么要搭建图床呢?因为我们在写博客的时候,很多同学都是在本地使用typora或者是obsidian进行markdown语法的文章的书写,文件格式通常都是…...
【DIY小记】减肥10kg保持半年的经验分享
作为程序员,脑力劳动者,保持一个健康的身体,是非常重要的。回顾24年自己取得的结果,一个比较亮眼的就是减肥减了10kg,到达了一个比较健康的体重,保持了半年没有反弹,当然到现在也依然在保持。今…...
[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...
C# 探秘:PDFiumCore 开启PDF读取魔法之旅
一、引言 在当今数字化时代,PDF 文件就像一个个神秘的宝盒,里面装满了各种信息。无论是项目文档、学术论文还是产品说明书,PDF 格式凭借其良好的兼容性和稳定性,成为了信息传递的重要载体。想象一下,你接到一个紧急任…...
计算机网络-运输层
重点内容: 运输层 是整个网络体系结构中的关键层次之一。一定要弄清以下一些重要概念: (1) 运输层为相互通信的应用进程提供逻辑通信。 (2) 端口和套接字的意义。 (3) 无连接的 UDP 的特点。 (4) 面向连接的 TCP 的特点。 (5) 在不可靠的网…...
TLF35584 基本介绍
1 概述 1)多电压电源芯片,包含6路输出电压。 LDO_Com:低降后调节器 5V/200mA 通信电源。LDO_C :低降后调节器 5V/600mA (TLF35584xxVS1)/3.3 V/600mA (TLF35584xxVS2) uC电源。Volt_Ref :参考电压5.0 V /- 1%/150mA …...
【Python】第四弹---深入理解Python控制流:从顺序到循环的全面解析
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、顺序语句 2、条件语句 2.1、什么是条件语句 2.2、语法格式 2.3、缩进和代码块 2.4、练习 2.5、空…...
PBFT算法
在我的博客中对于RAFT算法也有详细的介绍,raft算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一…...
软件过程模型
软件过程概念 软件生命周期 软件过程 在工作产品构建过程中,所需完成的工作活动,动作和任务的集合。 软件过程模型 软件过程评估 能力成熟度模型(CMM) 传统软件过程模型 瀑布模型(第一个软件过程模型ÿ…...
【Ubuntu】安装SSH启用远程连接
【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端: sudo systemctl start ssh贰、配置SSH(可跳过) 配置文件 …...
代码随想录算法【Day31】
Day31 56. 合并区间 class Solution { public://按照左边界,从小到大排序static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0];} vector<vector<int>> merge(vector<vector<int>>…...
Apache Tomcat文件包含漏洞复现(详细教程)
1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,其安装后会默认开启ajp连接器,方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发…...
C#高级:常用的扩展方法大全
1.String public static class StringExtensions {/// <summary>/// 字符串转List(中逗 英逗分隔)/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...
麒麟操作系统基础知识保姆级教程(二十一)进入单用户模式
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在咱们运维工作中,服务器的密码长度,密码复杂度,修改时间,超时时间,用户权限管理,root直接远程连接,普通用户su到r…...
基于C语言的数组从入门到精通
简介:本篇文章主要介绍了一维数组,二维数组,字符数组的定义,数组的应用,数组的核心代码解析,适用于0基础的初学者. C语言数组 1.一维数组 1.1定义 1.1.1声明 语法:数据类型 数组名[数组大小];示例:int arr[5]; 1.1.2初始化 a.静态初始化 完全初始化:int arr[5] {1…...
CLOUDFLARE代理请求重定向你太多次
现象 使用CLOUDFLARE代理前请求正常,使用CLOUDFLARE代理请求后出现 原因分析 以下是我的猜测,在默认情况下 CLOUDFLARE代理,可能是直接请求我们服务器的IP,比如:http://1.1.1.1 而不是通过域名的方式(如…...
算法随笔_21:字符的最短距离
上一篇:算法随笔_20:区间子数组个数 -CSDN博客 题目描述如下: 给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。 返回一个整数数组 answer ,其中 answer.length s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。 …...
第19个项目:蛇年特别版贪吃蛇H5小游戏
下载地址:https://download.csdn.net/download/mosquito_lover1/90308956 游戏玩法: 点击"开始游戏"按钮开始 使用键盘方向键控制蛇的移动 吃到红色食物可以得分 撞到墙壁或自己会结束游戏 核心源码: class SnakeGame { constructor() { this.canvas = docum…...
Vue3 30天精进之旅:Day01 - 初识Vue.js的奇妙世界
引言 在前端开发领域,Vue.js是一款极具人气的JavaScript框架。它以其简单易用、灵活高效的特性,吸引了大量开发者。本文是“Vue 3之30天系列学习”的第一篇博客,旨在帮助大家快速了解Vue.js的基本概念和核心特性,为后续的深入学习…...
单值二叉树(C语言详解版)
一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…...
贵州端午黔粽探源:贵州味道与黔味文化与糯米的融合?
黔粽的由来? 黔粽的贵州味道?探索贵州“黔味文化”找寻答案! 黔粽的特色由来与贵州味道 贵州粽,简称黔粽。黔粽的主要特色是“酸辣”,以其独特的“酸辣”口味和地域特色,与浙粽、京粽、粤粽、川粽、云粽、闽粽、台湾粽并列为“全国八大粽子派别”之一,并与甜味粽、咸味粽共…...
【Project】CupFox电影网站数据爬取分析与可视化
数据采集清洗与数据存储流程如下图所示。 数据分析与数据可视化流程设计如下 1.使用pymongo从数据库中查询所需的数据。对数据进行处理和分析,进行统计、分类、聚合等操作,提取关键指标和洞察。分析结果可以通过编写Python代码进一步优化、筛选和整理&a…...
Spring Boot 后端跨域解决方案:解锁前后端通信的障碍
随着前后端分离架构的普及,跨域资源共享(Cross-Origin Resource Sharing, CORS)问题成为了许多开发者必须面对的一个挑战。当Web浏览器尝试从一个源加载资源到另一个不同的源时,出于安全考虑,它会实施同源策略…...
Linux如何设置用户登录超时(/etc/profile)
Linux如何设置用户登录超时(/etc/profile) 1. 针对所有用户 # vi /etc/profile ... export TMOUT900 # 设置闲置时间为15分钟,单位为秒;如果没有此行则直接添加进去 ... vi /etc/profile TMOUT18000000000000 export QT_IM_MODULEfcitx readonly TMOUT expor…...
Elastic Cloud Serverless 获得主要合规认证
作者:来自 Elastic Oliver Mao 我们很高兴地宣布,Elastic Cloud Serverless 已获得多项重要的合规性认证。这一里程碑加强了我们对安全性、隐私性和法规遵从性的承诺。Elastic Cloud Serverless 现已通过以下行业领先框架的审核或认证:SOC 2 …...