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

Linux:进程概念

1.冯诺依曼体系结构

结论:
--- CPU不和外设直接打交道,和内存直接打交道。
--- 所有的外设,有数据需要收入,只能载入到内存中;内存写出,也一定是写道外设中。
--- 为什么程序要运行必须加载到内存?
     写好的程序存储到磁盘上,cpu要执行代码访问数据,只能从内存中读取(体系结构规定)。
--- 进度条代码:为什么已经调用了printf函数,但是数据没有被打印出来?
     显示器是外设,你的代码加载到内存cpu跑,跑完之后不是直接写入到外设的,而是写给内存,交给它一段时间后刷新,才被写入到外设输出出来。
--- 计算机怎么知道输入设备中有数据呢?
     各种外设和cpu在控制之间存在交互。
--- cpu中的控制器是用来响应外设的一些请求,它去告诉cpu;还有一些芯片专门用来把外设数据搬到内存,数据就绪状态的捕捉;cpu中的运算器进行算术运算和逻辑运算。

2.操作系统

操作系统是一个进行软硬件资源管理的软件,为用户提供稳定的、高效的、安全的执行环境。操作系统内包括进程管理、文件系统、内存管理、驱动管理。 管理者对重大事情做决策,但不需要和被管理者直接交互。决策需要有依据,依据的来源是数据! 
计算机如何管理硬件?
用struct结构体描述硬件各属性,然后用链表或其它数据结构将各硬件组织起来。

3.什么是进程?

一个运行起来(加载到内存)的程序---进程。 同一时期有很多磁盘上的程序要加载到内存上。操作系统要对这些进程进行管理,引入PCB的概念进行对进程的描述---进程控制块struct task_struct{进程属性},进程ID、属性、状态、优先级、数据......。当程序加载到内存里,系统给每一个进程匹配一个进程控制块,操作系统遍历链表(存储单元为进程控制块),将死亡状态的进程清除,将优先级高的进程加载到CPU---对进程的管理转化成了对链表的增删查 。管理的理念---先描述再组织。

---进程演示,进程在调度运行的时候,具有动态属性!

---在Linux下,当程序加载在内存中,然后将myproc二进制文件删除掉,进程不会关闭!一个进程在运行时一定加载的是磁盘上的某个程序,如何知道进程加载的是哪个磁盘上的程序,系统上标识
---getpid()获取子进程、getppid()获取父进程,重启进程每次子进程id每次发生变化,但是父进程id每次都不变。我们在登陆时,操作系统给指派了一个shell,命令行上启动的进程一般它的父进程没有特殊情况的话都是bash!./myproc这个任务交给子进程去跑,哪个子进程出问题了不会影响到父进程,但是如果父进程出问题了命令行解释器就会崩掉。 
---fork()创建子进程;fork是一个函数,在它执行前:父进程,执行后:父进程+子进程,fork()之后的代码,fork()函数的返回值;pid_t,同一个变量id,会给父进程返回子进程的id,给子进程返回0。被父进程和子进程共享!可以根据返回id不同让父子进程执行后续不同部分的代码。

4.进程状态:

1.运行状态:一般一个cpu会维护一个进程的运行队列,进程入队列---让进程的PCB结构体去排队。队列的存储数据类型是task_struct,在运行队列的所有进程都叫做运行状态(包括正在运行/在运行队列)。cpu运行处理某一个进程时,根据pcb去内存中查找储存着对应的code/data块去调用运行。进程的状态就是它的一个属性,在task_struct中存储。
2.阻塞状态:进程不只是只占用CPU资源,当cpu正在执行某个进程时,发现它需要调用某个外设资源时,由于外设速度很慢,就会先将它放到某外设队列去排队,这个状态就叫阻塞状态。当在外设处理完毕后,操作系统将它的状态改为R,重新放到运行状态中。所谓的进程不同的状态,本质上是进程在不同的队列中等待某种资源。
3.挂起状态:由于内存的空间有一定的限制,阻塞状态的任务又需要等待很长时间,d操作系统就会先将该任务的code/data换出保存在磁盘的某个区域,保留它的task_struct。阻塞状态不一定会挂起(内存不够才会挂起),只要不是运行状态都有可能被挂起。当阻塞状态结束,操作系统将该进程资源重新加载到内存,运行状态改为R,放入cpu的运行队列。
4.内存数据的换入换出:将进程的相关数据,从磁盘加载到内存、从内存保存到磁盘某个区域。

5.Linux下的进程

在实际的操作系统中,阻塞状态、挂起状态这些不会暴露给用户,只会提供用户有用的信息。
---前台进程:状态后面带+,一直在会在显示器打印,不能再键入shell命令,用ctrlC可以终止。
---后台进程:不带+,一直在显示器打印但是可以键入别的命令也会夹杂打印,用ctrlC不能终止,只能用kill -9 pid杀死该进程。
1.查看进程运行状态R:运行状态时间很短,经常会进入S状态排队。
2.查看进程休眠状态S:当程序调用需要访问外设时,就会进入休眠状态,阻塞状态的一种。
3.查看进程深度睡眠状态D:
4.查看进程暂停状态T:一个正在运行的程序,kill -19 pid暂停状态变为T ,kill -18 pid继续运行。
5.查看进程追踪暂停状态t:当代码文件进入gdb调试时,调试的过程等待输入指令时就是追踪暂停状态。
6.查看进程将亡状态Z:fork用父进程创建子进程,退出子进程,继续运行父进程,此时子进程并没有被回收,就是僵尸状态。进程结束会释放data/code,但是还没有释放PCB,等待回收后才能回收PCB,不回收会造成内存泄漏。
7.孤儿进程:父进程如果提前退出,子进程就会被操作系统“领养”,它的PPID变为1(操作系统进程)。例:fork用父进程创建子进程,然后杀死父进程,子进程的PPID就会变成1。

6.进程优先级(简单了解)

1.什么叫做优先级?
先/后获得某种资源的权利。
2.为什么会存在优先级?
资源有限,要访问资源的进程很多。
3.Linux优先级特点---很快
---PRI:老的优先级,不会被改也不能被改。
---NI:取值范围【-20,19】。通过top修改,sudo top ,PID,新Nice值,uit退出。
在Linux当中,一个进程的 最终优先级=老的优先级 + nice;Linux支持进程运行中,通过修改nice值修改优先级,大部分情况下nice默认为0。我们可以把一个进程运行起来后调整他的优先级。

7.进程的相关特性

进程之间具有竞争性、独立性--运行期间互不干扰。
任何时刻,只有一个进程正在运行;多个进程在多个CPU下并行运行
Windows下:一个cpu好似多个进程都在跑,时间片轮转:不管进程执行完花多长时间,每次给定一段时间让它占领cpu,时间到了继续返回运行队列排队,采用轮转的方式使得多个进程可以同时推进,这种方式叫做并发。通过进程切换的方式可以在一个时间段内让多个进程“同时运行”。

进程切换:

cpu有一套寄存器:取指令、分析指令、执行指令。指令--代码中
例:pc/eip寄存器:永远保存当前正在执行指令的下一条指令的位置。
当我们的进程在运行时,一定会产生很多的临时数据,比如加法运算的中间结果。这份数据属于当前进程。cpu内部虽然有一套寄存器硬件。但是,寄存器里面保存的数据,是属于当前进程的。
进程在运行时占有cpu,但不是占用到进程结束。进程在运行时都有自己的时间片。
上下文保护和上下文恢复:暂且认为将A进程运行中产生的临时数据暂时保存在PCB中,剥离当前的进程,轮转下一个进程。等到A进程继续轮转时,首先恢复它数据,加载到寄存器中。

8.环境变量

环境变量是操作系统为了满足不同的应用场景而预先在系统中设置的一大堆全局变量,这些变量在整个系统中一直都会被其它进程访问到。
command not found
要执行一个指令或程序,先找到这个程序。 ./myprocess -》 ./表示当前路径
将我们的程序拷贝到系统安装指令下,就可以不加./直接运行了。sudo cp myprocess  /usr/bin/
没经过测试的程序最好不要安装在bin下,sudo rm myprocess  /usr/bin/
添加到环境变量中:echo $PATH输出系统的环境变量,pwd查询当前路径,将当前路径添加到环境变量中,export PATH=$PATH:/ / /。$PATH将老的环境变量先加载进来再添加新的,直接添加自己的环境变量的话会导致整个PATH文件被覆盖。
当自己的可执行程序的路径也被添加到环境变量中后,也可以用which查询
cd ~,vim /etc/bashprofile -> vim /etc/bashrc配置文件中环境变量的设置,在系统启动后加载到内存
---env‌是一个外部命令,用于列出当前系统的所有环境变量及其赋值。
---PATH‌是一个环境变量,用于指定操作系统在命令行中搜索可执行文件的目录列表。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define USER "USER"
#define MY_ENV "myval"
int mai()
{char *who = getenv(USER);if(strcmp(who,"root")==0)
{printf("user:%s\n",who);printf("user:%s\n",who);printf("user:%s\n",who);
}else printf("权限不足!\n");return 0;
}
int main()
{char *myenv = getenv(MY_ENV);if(NULL==myenv){printf("%s,not found\n",MY_ENV);return 1;}printf("%s-%s\n",MY_ENV,myenv);return 0;

USER环境变量最大的意义,可以标识当前使用Linux的用户
bash就是一个系统进程,mycmd也会变为一个进程(会由fork创建),是bash的子进程,由于环境变量的全局属性,子进程也能访问环境变量;但对于自己创建的myval,只在当前bash下创建,由当前bash产生的子进程都不能访问它。本地变量也可以用set添加: ls显示的是该目录下的文件,shell在当前目录变化时会改变配置文件PWD

9.命令行参数

main()函数可以带参数吗?可以带几个参数?可以带什么参数? 
int main(int argc, char *argv[ ] ) ;

int min(int argc,char* argv[])
{for(int i=0;i<argc;i++){printf("argv[%d]->%s\n",i,argv[i]);}return 0;
}


在我的进程的上下文中,获取环境变量的三种方式:
1.getenv,更加推荐。拿到的是等号后面的内容,其它两种是整行输出。

int main()
{char* myusr = getenv(USER);printf("%s\n",myusr);return 0;
}

 2.char *env[ ]

int main(int argc,char* argv[],char* env[])
{for(int i=0;env[i];i++){printf("%s\n",env[i]);}return 0;
}

3.extern char **environ,指向env的那张表,存储的系统中的环境变量

int main()
{extern char **environ;for(int i=0;environ[i];i++)//这里为什么降维了?{printf("%s\n",environ[i]);}return 0;
}


补充:putenv(),改变或者添加一个环境变量
stat 获取文件的所有属性

10.程序地址空间

多进程在读取同一个地址时,读出来的值不同!-> 这里的指针指向的地址,不是物理地址,是虚拟地址。

#include<stdio.h>
#include<unistd.h>
int global = 100;
int main()
{pid_t id = fork();if(id<0){printf("error!\n");return 1;}else if(id==0){int cnt = 0;while(1){printf("我是子进程! pid:%d,ppid:%d,global:%d,&global:%p\n",getpid(),getppid(),global,&global);sleep(1);cnt++;if(cnt==10){global = 300;printf("子进程已经更改了global!\n");}}}1,17          else{while(1){printf("我是父进程! pid:%d,ppid:%d,global:%d,&global:%p\n",getpid(),getppid(),global,&global);sleep(2);}}return 0;
}

在global被改变后,子进程打印300,父进程打印100?---发生了写时拷贝

地址空间的本质:是内核的一种数据结构 mm_struct  //以32位为例
---地址空间描述的基本空间大小是字节
---32位下能够表示 2^32次方个地址->只要保证唯一性即可
---2^32*1字节 = 4GB空间范围
---每一个字节都要有唯一的地址,给每一个字节用32bit位的地址表示

为什么 存在地址空间
---1.如果让进程之间直接访问物理内存,万一进程越界非法操作呢?
      非常不安全。页表拦截非法操作!
---2.地址空间的存在可以更方便的进行进程和进程数据代码的解耦,维持进程独立性这样的特征。
写时拷贝:任何一个进程尝试写入时,操作系统先进行数据拷贝,更改页表映射,然后再让进程进行修改。操作系统,为了保证进程的独立性,做了很多工作! ---通过地址空间和页表,让不同的进程,映射到不同的物理内存处。
---3.再一次理解地址空间
在磁盘中的可执行程序里面,有没有地址呢?(还没有加载到内存的时候),这个地址是什么地址?
---调C库函数的时候需要链接,链接的过程就是将库中需要用到的函数的地址加载到程序中形成可执行程序,这个地址叫做逻辑地址。
---虚拟地址空间,不是只有操作系统会遵守对应的规则,编译器也要遵守!编译器在编译代码时,会按照虚拟地址空间规则划分代码区/数据区(堆和栈运行时才会产生),编译器按照虚拟地址空间的方式同时对我们的代码和数据进行编址。当程序被加载到物理内存中的时候,该程序对应的指令和数据,都天然的具有了物理地址!

相关文章:

Linux:进程概念

1.冯诺依曼体系结构 结论&#xff1a; --- CPU不和外设直接打交道&#xff0c;和内存直接打交道。 --- 所有的外设&#xff0c;有数据需要收入&#xff0c;只能载入到内存中&#xff1b;内存写出&#xff0c;也一定是写道外设中。 --- 为什么程序要运行必须加载到内存&#xf…...

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…...

【Leetcode 热题 100】208. 实现 Trie (前缀树)

问题背景 T r i e Trie Trie 或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补全和拼写检查。 请你实现 Trie 类&#xff1a; Trie() 初始化前缀树对象。void insert(String word…...

从0开始在linux服务器上部署SpringBoot和Vue

目录 一、申请服务器的IP &#xff08;1&#xff09;阿里云申请IP &#xff08;2&#xff09;设置服务器的密码 &#xff08;3&#xff09;远程终端——MobaXterm 二、Docker &#xff08;1&#xff09;安装Docker &#xff08;2&#xff09;镜像加速 &#xff08;3&…...

41 stack类与queue类

目录 一、简介 &#xff08;一&#xff09;stack类 &#xff08;二&#xff09;queue类 二、使用与模拟实现 &#xff08;一&#xff09;stack类 1、使用 2、OJ题 &#xff08;1&#xff09;最小栈 &#xff08;2&#xff09;栈的弹出压入序列 &#xff08;3&#xf…...

代码随想录-笔记-其八

让我们开始&#xff1a;动态规划&#xff01; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; class Solution { public:int climbStairs(i…...

信号仿真高级工程师面试题

信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...

FLTK - build fltk-1.1.10 on vs2019

文章目录 FLTK - build fltk-1.1.10 on vs2019概述笔记buildtest测试程序运行 END FLTK - build fltk-1.1.10 on vs2019 概述 看书上用到了fltk-1.1.10, 用vs2019试试能否正常编译使用? 笔记 build 从官网下载fltk-1.1.10-source.tar.bz2 用7zip解开 fltk-1.1.10-source.…...

FPGA远程升级 -- FLASH控制

简介 前文讲到如何实现XILINX芯片程序跳转&#xff0c;但升级程序是事先通过VIVADO工具将两个程序合成一个BIN文件实现升级的&#xff0c;并不能在线更新升级。要实现远程升级的能力需要对FPGA的FLASH进行在线写入升级程序。 FLASH介绍 本次设计FLASH选用的是S25FL128芯片&…...

蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式 uniapp 解决 iOS 获取 MAC地址&#xff0c;在Android、iOS不同端中互通&#xff0c;根据MAC 地址处理相关的业务场景&#xff1b; 文章目录 解决iOS设备获取MAC方式监听寻找到新设备的事件BLE工具效果图APP监听设备返回数据解决方式ArrayBuffer转16进制…...

【总结(三)】单片机重点知识总结记录(串口重定向+按键消抖+延时)

一.串口重定向 串口重定向代码如下 注意&#xff1a; 要添加头文件include "stdio.h"要勾选微库&#xff0c;即Use MicroLIB /**********重定向************/ //串口1 int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff)…...

攻防世界 unserialize3

开启场景 题目为unserialize3&#xff0c;这个单词在php中代表反序列化&#xff0c;代码 __wakeup 也是php反序列化中常见的魔术方法&#xff0c;所以这个题基本就是和反序列化有关的题目。根据代码提示&#xff0c;编写一个Exploit运行&#xff0c;将对象xctf的信息序列化 得到…...

ISDP010_基于DDD架构实现收银用例主成功场景

信息系统开发实践 &#xff5c; 系列文章传送门 ISDP001_课程概述 ISDP002_Maven上_创建Maven项目 ISDP003_Maven下_Maven项目依赖配置 ISDP004_创建SpringBoot3项目 ISDP005_Spring组件与自动装配 ISDP006_逻辑架构设计 ISDP007_Springboot日志配置与单元测试 ISDP008_SpringB…...

如何注册华为云国际版账户:详细步骤指南

华为云作为全球知名的云计算服务提供商&#xff0c;提供了丰富的云服务和解决方案。无论是企业还是个人开发者&#xff0c;注册华为云国际版账户都是开启云计算之旅的第一步。我们九河云通过本文将为您详细介绍华为云国际版的注册流程。 第一步&#xff1a;访问华为云国际版官网…...

存储过程实现多个分类不同计算规则得到对应的分类、月份和款号

该存储过程 PRO_MON_MDCODE 实现多个分类不同计算规则得到对应的分类、月份和款号,其中线下分类的款最早出现时间会在20230101,最晚是当前月份后12月,电商的款取商品维表的23,24,25年商品年份的A款,其他业务分类逻辑(A-线上,B电商公司,C品牌公司)的款最早出现时间会在2…...

【LeetCode】906、超级回文数

【LeetCode】906、超级回文数 文章目录 一、通过数据量猜解法 枚举 数学 回文1.1 通过数据量猜解法 枚举 数学 回文1.2 多语言解法 二、打表法 一、通过数据量猜解法 枚举 数学 回文 1.1 通过数据量猜解法 枚举 数学 回文 减小数据规模: 先构成回文, 再平方, 再判断是否是范围…...

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…...

【ES6复习笔记】模板字符串(3)

介绍 模板字符串是 ES6 引入的一种新的字符串声明方式&#xff0c;它使用反引号&#xff08;&#xff09;来定义字符串&#xff0c;而不是单引号&#xff08;&#xff09;或双引号&#xff08;"&#xff09;。模板字符串可以包含变量、表达式和换行符&#xff0c;这使得它…...

Linux学习

Linux Linux目录结构 Linux只有一个顶级目录&#xff0c;称之为&#xff1a;根目录 /在Linux系统中表示 出现在开头的/表示&#xff1a;根目录 出现在后面的/表示&#xff1a;层次关系 Linux命令基础 什么是命令、命令行 命令&#xff1a;即Linux操作指令&#xff0c;是系…...

【PostgreSQL使用】最新功能逻辑复制槽的failover,大数据下高可用再添利器

逻辑复制的failover ​专栏内容&#xff1a; postgresql入门到进阶手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. ✅ &#x1f52…...

MongoDB 创建用户、User、Role 相关 操作

创建用户 # db.createUser() Creates a new user.详细 查看 db.createUser() - MongoDB Manual v8.0 设置用户 Role&#xff08;创建用户时也可以设置&#xff09; # db.grantRolesToUser() Grants a role and its privileges to a user. 详细 查看 db.grantRolesToUser(…...

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)

一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置&#xff0c;ViteVue 项目的创建&#xff0c;Element Plus 插件的使用&#xff0c;以及计时器组件的创建和使用。 想要直接实现计时器组件&#xff0c;查看文章的第四部分。…...

Redis单线程快的原因

基于内存操作&#xff1a;Redis将数据存储在内存中&#xff0c;使得数据的读写速度极快&#xff0c;这是其性能优势的主要原因。单线程避免上下文切换&#xff1a;在多线程环境下&#xff0c;CPU核数有限&#xff0c;线程上下文切换会带来性能损耗。Redis采用单线程&#xff0c…...

基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线BLOG网”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…...

重温设计模式--6、享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…...

springboot-starter版本升级es版本问题

一、背景说明 版本漏洞处理&#xff0c;springboot版本升级&#xff0c;es版本暂不升级&#xff0c;但是pom引用中es版本一直为7.17.15高版本&#xff0c;不想显示声明版本&#xff0c;定位具体问题&#xff0c;最后还是重新定义了版本进行处理。 二、异常情况 这里看4.4.18是…...

嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备

目录 一、概述 二、一张图说尽HA 三、HA的相关资料 四、米家集成划重点 五、总结 一、概述 小米Home Assistant 米家集成开源一周star近15k&#xff0c;迭代4个版本&#xff0c;12个贡献者 本文科普一下Home Assistant&#xff08;简称HA&#xff09;、米家集成&#xff…...

前端Python应用指南(四)Django实战:创建一个简单的博客系统

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计&#xff08;三&#xff09;Django vs Flask&#xff1a;哪种框架适…...

webrtc获取IceCandidate流程

在WebRTC(Web Real-Time Communication)中,ICECandidate是一个关键概念,它用于描述在建立点对点(P2P)连接时可以考虑的潜在通信端点。以下是关于WebRTC中ICECandidate的详细解释: 一、ICECandidate的定义 ICECandidate对象通常包含以下关键属性: foundation:用于唯一…...

快速入门Spring AI Alibaba

文章目录 前言一、环境准备二、获取API Key三、代码示例pomapplication.ymlcontroller 前言 Spring Cloud Alibaba AI 以 Spring AI 为基础&#xff0c;并在此基础上&#xff0c;基于 Spring AI 0.8.1 版本 API 完成同义系列大模型的接入实现阿里云同义系列大模型全面适配。 在…...

【mysql】MVCC及实现原理

【mysql】MVCC及实现原理 【一】介绍【1】什么是MVCC【2】什么是当前读和快照读【3】当前读&#xff0c;快照读和MVCC的关系【4】MVCC 能解决什么问题&#xff0c;好处&#xff08;1&#xff09;数据库并发场景有三种&#xff0c;分别为&#xff1a;&#xff08;2&#xff09;M…...

C++ —— 模板类与函数

C —— 模板类与函数 模板类可以用于函数的参数和返回值&#xff0c;有三种形式&#xff1a; 普通函数&#xff0c;参数和返回值是模板类的实例化版本。函数模板&#xff0c;参数和返回值是某种的模板类。函数模板&#xff0c;参数和返回值是任意类型&#xff08;支持普通类和…...

【笔记】下载mysql5.7

MySQL5.7安装超详细步骤(保姆级教程)_mysql5.7下载安装-CSDN博客 下载与安装 初次登录以及改密码 MySQL 5.7 安装教程&#xff08;全步骤图解教程&#xff09;_mysql5.7的安装教程-CSDN博客...

让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战

在当今科技飞速发展的时代&#xff0c;大语言模型&#xff08;LLM&#xff09;的兴起彻底改变了人工智能领域的格局。从智能客服到文本生成&#xff0c;从知识问答到代码编写辅助&#xff0c;大语言模型的应用无处不在&#xff0c;深刻影响着我们的生活和工作。然而&#xff0c…...

Linux运维常见命令

vi/vim快捷键使用 1)拷贝当前行 yy ,拷贝当前行向下的5行 5yy&#xff0c;并粘贴&#xff08;输入p&#xff09;。 2)删除当前行 dd ,删除当前行向下的5行5dd 3)在文件中查找某个单词 [命令行下 /关键字&#xff0c;回车查找 ,输入n就是查找下一个 ] 4)设置文件的行号&…...

前端真实面试题自用

一、写在前面 笔者&#xff0c;经过计算机学硕考研的失败后&#xff0c;想谋求一份前端工作实在是太难了。一方面&#xff0c;确实曾经学习过的东西很久没有拾起&#xff0c;另一方面&#xff0c;对于前端面经还是记忆不深刻&#xff0c;特地写此贴记录笔者在真实前端面试中遇…...

人工智能与云计算的结合:如何释放数据的无限潜力?

引言&#xff1a;数据时代的契机 在当今数字化社会&#xff0c;数据已成为推动经济与技术发展的核心资源&#xff0c;被誉为“21世纪的石油”。从个人消费行为到企业运营决策&#xff0c;再到城市管理与国家治理&#xff0c;每个环节都在生成和积累海量数据。然而&#xff0c;数…...

初始 ShellJS:一个 Node.js 命令行工具集合

一. 前言 Node.js 丰富的生态能赋予我们更强的能力&#xff0c;对于前端工程师来说&#xff0c;使用 Node.js 来编写复杂的 npm script 具有明显的 2 个优势&#xff1a;首先&#xff0c;编写简单的工具脚本对前端工程师来说额外的学习成本很低甚至可以忽略不计&#xff0c;其…...

benchmarksql5.0 测试工具如何在达梦上能够跑起来?

(1)添加驱动程序文件&#xff1a; lib文件夹下创建一个dm文件夹&#xff0c;并在dm文件夹下放置达梦数据库的驱动程序&#xff1a;DmJdbcDriver8.jar (2)引用驱动程序文件所在目录: 在文件benchmarksql-5.0/run/funcs.sh中的function setCP()函数中&#xff1b; 也就是在文件…...

amazon广告授权

amazon授权资料地址 Amazon Advertising Advanced Tools Center postman地址&#xff1a;Amazon Advertising Advanced Tools Center...

设计模式与游戏完美开发(2)

更多内容可以浏览本人博客&#xff1a;https://azureblog.cn/ &#x1f60a; 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式&#xff08;Facade&#xff09; 一、游戏子功能的整合 一个游戏程序常常由内部数个不同的…...

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…...

VSCode调试

目录 C/C远程本地调试插件配置参考 C/C远程本地调试 测试源码&#xff1a;https://github.com/jrhee17/ssl-study 插件 Remote - SSH C/C 配置 .vscode/launch.json {"version": "0.2.0","configurations": [{"name": "afte…...

【ES6复习笔记】解构赋值(2)

介绍 解构赋值是一种非常方便的语法&#xff0c;可以让我们更简洁地从数组和对象中提取值&#xff0c;并且可以应用于很多实际开发场景中。 1. 数组的解构赋值 数组的解构赋值是按照一定模式从数组中提取值&#xff0c;然后对变量进行赋值。下面是一个例子&#xff1a; con…...

01 - 初识 Spring

初识Spring 企业级应用 企业级应用是指那些为商业组织、⼤型企业而创建并部署的解决⽅案及应用。这些⼤型的企业级应用结构复 杂、涉及的外部资源众多&#xff0c;事务密集&#xff0c;数据规模⼤&#xff0c;用户数量多&#xff0c;有较强的安全性考虑和较⾼的性能要求。 …...

重装荣耀X14笔记本电脑踩坑记

这几天趁着有国补搞了台荣耀 X14笔记本电脑。到手后第一件事情对我来说当然是要重装成Windows 11 LTSC版。所以按以往的经验做了个USB启动安装盘&#xff0c;但发现上电后按F12能进入启动设备选择&#xff0c;可是USB分类下没有任何设备。重启按F2进入设置界面&#xff0c;关闭…...

华为管理变革之道:奋斗文化与活力

目录 企业文化是什么&#xff1f; 为什么活下去是华为的文化&#xff1f; 活下来&#xff0c;是华为公司的最低纲领&#xff0c;也是华为公司的最高纲领&#xff01; 资源终会枯竭&#xff0c;唯有文化才能生生不息 企业文化之一&#xff1a;以客户为中心 企业文化之二&a…...

代码随想录算法训练营第十五天-二叉树-110.平衡二叉树

所谓平衡二叉树是指任意子树的高度差不超过1目前所学习的有关二叉树的问题&#xff0c;都是基于二叉树的遍历顺序来实现的 #include <iostream> #include <sstream> #define LEN 10009struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(): val(0…...

各种网站(学习资源、常用工具及其他,持续更新中~)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...

【gunicorn -k gevent 参数gevent说明,主要CPU密集和I/O密集型】

CPU 密集型和I/O 密集型是两种不同的计算任务类别&#xff0c;它们的性能瓶颈来源不同&#xff1a; 1. CPU 密集型 定义 CPU 密集型任务是指主要消耗 CPU 计算资源 的任务。这类任务需要大量的计算操作&#xff0c;而很少涉及 I/O 操作&#xff08;如网络或磁盘的读写&#x…...