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

计算机是如何工作的

目录

冯诺依曼体系

CPU基本工作流程:

逻辑门

门电路

算术逻辑单元 ALU(Arithmetic&LogicUnit)

算术单元(Arithmetic Unit)

逻辑单元(Logic Unit)

ALU符号

寄存器(Register)和内存(RAM)

控制单元 CU(Control Unit)

指令(Instruction)

CPU的基本工作流程

编程语言(Program Language)

程序(Program)

编程语言的发展

操作系统(Operating System)

操作系统的核心概念:

进程/任务(Process / Task)

操作系统中内核的重要功能:进程管理

详解进程:

操作系统的进程调度关键:分时复用!

完!!!


冯诺依曼体系

现代的计算机,大多都遵守冯诺伊曼体系结构

冯诺依曼体系也称为存储程序计算机,是现代计算机体系结构的基础。

核心思想:

        1.二进制:数字计算机的数值采用二进制,即以0和1来作为基础用于数值表示,这种表示方法简化了计算机的电路设计,提高了计算效率。

        2.程序顺序进行:计算机按照程序的顺序执行,即预先编好程序,然后交给计算机,计算机按照程序中预先定义好的顺序来进行数值运算。

功能:

        1.输入:把需要的程序和数据送至计算机中。

        2.存储:具有长期记忆程序,数据,中间结果及最终运算结果的能力。

        3.处理:能够完成各种算术运算,逻辑运算和数据传送等数据加工处理操作。

        4.控制:能够根据需要,来控制程序走向,并且能够根据指令控制其各部件协调操作。

        5.输出:按照要求将处理结果输出给用户。

组成:

  • 运算器:用于完成各种算术运算,逻辑运算和数据传送等数据加工处理的操作。
  • 控制器:用于控制程序的执行,是计算机的大脑。它与运算器一起组成计算机的中央处理器(CPU)
  • 存储器:用于记忆程序和数据,程序和数据以二进制代码形式不加区别地存放在存储器当中存放位置由地址决定。分为外存和内存,用于存储数据(使用二进制方式进行存储)
  • 输入设备:如鼠标,键盘等,用于将数据和程序输入到计算机中。
  • 输出设备:如显示器,打印机等,用于将数据或程序的处理结果展示给客户。

针对存储空间:

硬盘 > 内存 >> CPU

针对数据访问速度:

CPU >> 内存 > 硬盘

CPU基本工作流程:

下面以一个从无到有的过程,搭建出一个CPU:

逻辑门

电子开关 —— 机械继电器

通过电子开关,可以实现1位(bit)的看似无用的逻辑运算,但至少工作起来了。

门电路

使用电子开关构建一些有用的部件 —— 门电路。可以实现1位(bit)的基本逻辑运算。

算术逻辑单元 ALU(Arithmetic&LogicUnit)

ALU是计算机中进行算术,逻辑运算的核心部件,是计算机的数学大脑。接下来,我们可以用上面构建的逻辑门来完成一个ALU。

补充知识:

进制的理解:

算术单元(Arithmetic Unit)

负责计算机里的所有数字操作。接下来会实现一个8位(bits)的加法器,来演示整个过程。

这样,我们就有了一个8位(bits)的加法器。算术单元支持的操作并不止这些,通过继续组合逻辑门,算术单元可以做到加减乘除甚至更多的算术运算。

逻辑单元(Logic Unit)

逻辑单元主要用来进行逻辑操作,最基本的操作是与,或,非,异或,但不只是一位(bit)数的比较。

ALU符号

经过基本的逻辑门电路,我们实现了一个8位(bits)的ALU,甚至比Intel74181还强大(Intel74181只是一个4位的ALU)

寄存器(Register)和内存(RAM)

光有ALU还是不够的,无法为ALU提供存储的部件。所以还需要门电路简单说明下存储的制作。

可以利用门锁来构建需要的寄存器和内存

内存的构建比寄存器复杂一些,但基本原理一致。如此构建的内存被称为RAM支持O(1)时间复杂度访问任意位置的数据,这也就是数组下标访问操作是O(1)的硬件支持

控制单元 CU(Control Unit)

有了ALU,存储,还不足以让计算机工作起来,需要有一个部件来指挥ALU进行何种的运算,这个部件就是控制单元(CU)。

指令(Instruction)

所谓指令,即指导CPU进行工作的命令,由操作码 + 被操作数组成

其中,操作码用来表示要做什么动作被操作数是本身指令要操作的数据可能是内存地址,也可能是寄存器编号等

指令本身也是一个数字,用二进制形式保存在内存的某个区域之中。

CPU的基本工作流程

下面,将演示指令运行的一个周期

我们写好的C语言或者Java程序,都是先编译成可执行文件(exe,包含了这个程序运行时要执行的指令和依赖的数据),当点击exe文件运行的时候,操作系统会把要执行的指令和依赖的数据加载到内存中,在CPU中存在一个特殊的寄存器”程序计数器“,用来保存接下来要从那个内存位置来执行指令,在exe加载到内存后就能被系统自动设置好,也就是说程序计数器此时会默认为0,从0号地址开始执行,同时随着指令的执行,这里的值也会随着更新,默认情况下,就是+1自增(即顺序执行)如果遇到跳转类语句,会被设为其他的值。

执行指令的三个重要阶段:

        1.取指令(CPU从内存中读取指令内容到CPU内部(会有专门的寄存器来保存读取到的指令,不是上面所述的A B寄存器))

        2.分析指令(识别该指令的功能和操作数)

        3.执行指令

初始情况下,从0地址开始读取指令,分析上面的指令表,以0010 1110为例来执行指令

        1.取指令:取到00101110指令

        2.分析指令:前四位0010为操作码,查表发现0010是LOAD_A操作,用于将数据加载到A寄存器,也就是把地址为1110(十进制为14)的数据读取到寄存器A中

        3.执行指令:把14的内存地址对应的数据0000 0011(3)寄存到存储器A中

程序计数器++,执行地址为1的指令,即0001 1111

        1.取指令:取到00011111指令

        2.分析指令:0001对应LOAD_B操作,也就是将1111(十进制为15)这条地址对应的数据加载到B寄存器中

        3.执行指令:把15的内存对应的数据0000 1110(14)存储到寄存器B中

程序计数器++,执行地址为2的指令,1000 0100

        1.取指令:取到1000 0100指令

        2.分析指令:1000对应ADD操作,也就是计算两个指定寄存器的数据的和,并将结果放入第二个寄存器,01为B寄存器。00为A寄存器,所以就是将B寄存器中的数值与A寄存器中的数值相加,然后将结果存放到A寄存器中。

        3.执行指令:A寄存器中数据 + B寄存器中数据 = 17(0001 0001)存放在A寄存器中

程序计数器++,执行地址为3的指令,0100 1101

        1.取指令:取到0100 1101指令

        2.分析指令:0100对应STORE_A操作,将数据从A寄存器写入RAM的指定地址,将A寄存器中的0001 0001(17)存储到1101(13)地址中

        3.执行指令:将13号内存中的数据变为0001 0001

程序计数器++,执行地址为4的地址,对应表中数据为0000 0000,表示程序执行结束。则上述过程,完成了 3 + 14的过程。 

下面来总结下执行周期经过那些阶段:

当然,电子计算器中的CPU不会像刚刚那样,靠自己来驱动这个周期的运转,而是靠背后的一个时钟来进行周期驱动的。

最后,ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的一个词汇:中央处理器(Center Process Unit)CPU。

补充认识CPU:

定义与功能:CPU,是计算机系统的核心部件,负责执行计算机的基本算数,逻辑,控制和输入输出操作指令。是计算机的运算和控制核心,是信息处理,程序运行的最终执行单元。

CPU的制作工艺非常精密,现今较为出名的公司:

(1)英特尔(2)AMD(3)高通

CPU的核心参数:
两个重要指标是核心数和频率:

        1.核心数:指CPU内部集成的物理核心数量。多核心CPU可以同时处理多个任务,提高整体性能。

        线程数:是CPU能够同时处理的线程数量。一般先进的CPU技术(如Intel的超线程技术)允许每个物理核心处理两个或者更多的线程,被称为是逻辑核心 / 逻辑处理器。因此,线程数可能大于等于核心数。如图,我的电脑为16核。内核为12,逻辑处理器为16,此处采用大小核技术架构。

单核处理器与线程:一个核心只能处理一个线程

超线程技术:一个核心能处理多个线程

        2.主频:是CPU的时钟频率,表示CPU在单位时间内(秒)发出的脉冲数。它决定了CPU的运算速度,主频越高,CPU的运算速度就越快。主频通常以GHz为单位。

        基准速度:一般可以认为是下限速度。

        实时频率/睿频(对应图中的速度,它是会动态变化的):随着频率提升,消耗的电量更高,发热更多...

        CPU的频率往往都是动态变化的,会根据任务量动态调整。

        计算机都由”功耗墙“,CPU温度达到一定的阈值(105摄氏度),自动降频。(散热工作做好,可以让频率达到更高的水准 --> 超频)

        3.指令:(C/Java语言,程序语言编写的程序,最终都要被翻译为”CPU上执行的二进制指令“(机器语言(用二进制表示)或叫做汇编语言))。

        4.寄存器:位于CPU的内部,是CPU内部存储数据的部分,具有非常高的存取速度,被用来暂时的存储数据指令地址和状态信息,以便于CPU在执行指令的时候,能够快读访问到这些数据。

但是,存储数据,主要还是靠内存和硬盘,实际上,CPU在运算中,需要先把数据从内存中读到CPU中,才能进行运算。存储空间往往为几KB,比内存更小,速度比内存更快,成本也比内存更高,断电后会丢失。因此,CPU在计算的时候,就需要反复的从内存加载数据,效率比较有影响。

        现代CPU引入了缓存来解决这一问题。

某个内存的数据,经常使用,寄存器又存不下,就可以放在缓存中。数据使用的频率越高,就往L1放,没那么高,就L3,中间就L2。

编程语言(Program Language)

上面,我们大致了解并且制作了CPU和内存,现在我们利用CPU和内存,来尝试还原一下,我们已经熟悉的编程语言。例如:Java是如何和CPU指令对应起来的。

程序(Program)

所谓程序,就算一组指令,以及这组指令要处理的数据。从狭义上来说,程序,通常表现为一组文件

程序 = 指令 + 指令要处理的数据

jre这组文件中,保存着关于JDK程序的指令和数据。PS:JDK是由多个程序组成的,其中exe结尾的文件可以粗略的认为是按照规定格式保存的指令。

早期编程:

很久以前,那还是我用Win98的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介 绍了⼀个高手来帮我修电脑。

他看了⼀下电脑,问我有没有98的盘,我说没有。 他想了⼀下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好 说什么,就把电话拔下来给他了。

他把电话线空着的⼀头接在电脑的⼀个插孔内,然落后入了dos,然后就开始在电话上不停的 按着键,他按键的速度异常快,但是只按0,1两个键,我搞不懂这有什么用,但也不敢问, 看了半个多小时,他还是不停的按这两个键,我徐徐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就⼀个⼈去隔壁睡觉了。

醒来的时候,⼀看已经过了4个多小时,我起⾝到隔壁,看见他正在98里面调试,过了⼀会 儿,他说,你试试,我坐上椅子用了⼀下,真的好了,我当时也不懂电脑,谢过人家就走 了。 后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了⼀个98系统, 我后来问我朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯...

当然,上面只是一个流传的趣味小故事,真实性有待考证,不过,最早的电脑,要进行编程,是真的需要用0 1 来进行编程的。

下图为ALtair 8800计算机,是最早的一批微型电脑。用户需要控制开关,一个bit一个bit的将程序录入电脑中。

如果要求计算机的用户都必须会使用二进制编程,那门槛实在是太高了,于是,编程语言应用而生了。

编程语言的发展

为了提升编程效率,最早创造了汇编语⾔的概念。其实汇编语⾔和机器语⾔(也就是指令)直接是完 全⼀⼀对应的,只是相对于0、1这些数字,发明了⼀些帮助⼈类记忆和理解的符号将其对应起来,也 就是我们上⾯看到的类似LOAD_A、LOAD_B等。程序员完成编程之后,需要使⽤汇编器 (assembler)将汇编语⾔翻译成机器语⾔。

虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,⽽且随着计算 机⼚商越来越多,⼀次编写的程序往往只适⽤于⼀类计算机。这个是远远不够的,所以更为⾼级的语 ⾔诞⽣了,⾼级语⾔屏蔽了硬件细节,让程序员可以站在更⾼的层⾯上思考⾃⼰的业务。这⾥以C语 ⾔为例,程序员完成程序的编写之后,需要使⽤编译器(compiler)和连接器(linker)将程序翻译成 汇编语⾔,再借助汇编器变成最终的机器语⾔

借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,⾼度的抽象,导致很多的程序员 把计算机视为⼀个⿊箱,完全⽆法理解⾃⼰的程序是如何⼯作起来的,希望我们⼤家不要做这种程序 员。 我们使⽤的Java语⾔相对于C语⾔更⾼级⼀点,但基本抽象原理上没有太⼤的差异,我们暂时就不展 开说明了。

注意:高级语言的一条语句(Statement)往往对应很多条指令(Instruction)才能完成

操作系统(Operating System)

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统由:Windows系列,Unix系列,Linux系列,OSX系列,Android系列,iOS系列...

每个系统之间运行的程序都是不同的,即,系统之间是不兼容的

举例:在windows写了一个程序,这个程序是不能直接拿到Linux等其它系统上运行的(系统内部的API存在差异)

但是对于Java这种跨平台性的语言,在Windows和Linux有着不同的JVM,这些JVM是兼容同样的字节码

操作系统的核心概念:

一个操作系统需要做的最重要的事情就是管理

        1.管理不同的硬件设备

        2.给软件提供稳定的运行环境(同时运行很多程序,要做到程序之间互不干扰

以上两点也成为”操作系统内核“,是核心功能的集合。一个完整的操作系统就是内核 + 配套的应用程序

操作系统的定位:

操作系统会管理各种的硬件设备处理器,主存,I/O设备

操作系统给应用程序提供API(接口),让应用程序调用,从而来完成不同的操作。

例如:println是Java标准库提供的函数。JVM中,为了实现println,就会调用操作系统提供的API,执行(Linux对应的系统api叫做write)调用系统API,程序就会进入到系统的内核中执行,此时系统就会操作对应的硬件设备来完成打印操作,操作系统管理的硬件设备有很多。

不是系统直接操作硬件,而是硬件厂商,会提供对应的”驱动程序“,操作系统其实就是通过驱动程序,间接的操作硬件设备的。

进程/任务(Process / Task)

操作系统中内核的重要功能:进程管理

所谓进程,就是正在运行的应用程序

应用程序的两种状态:

        1.没有运行时是一个exe文件,待在硬盘里,为可执行文件

        2.运行的时候,exe就会被加载到内存中,并且cpu执行里面的指令,即进程。

进程都是通过操作系统来执行的,执行进程里的指令需要硬件资源。

进程是操作系统分配资源是基本单位!!!

进程是如何管理的呢?----> PCB(Process Control Block)

        1.描述:通过结构体或类,把进程的各种属性表示出来(对于Linux系统,使用称为”PCB“(进程控制块)这样的结构体来描述进程信息的)

        2.组织:通过数据结构,把多个上面的结构体,串起来,并进一步的进行各种增删改查的操作(简单理解:是通过链表的方式,把上述多个PCB串在一起,但实际上更复杂)

创建新的进程就相当于是创建了一个PCB结构体并插入到链表中,销毁进程就相当于,删除了某个PCB对应的链表节点,并释放资源。查询进程列表,就算在遍历这个链表,依次显示出对应的信息。

详解进程:

详解PCB(Process Control Block)进程控制块

PCB是一个非常复杂的结构体,里面包含着非常多的属性,重要的如下几个

        1.PID进程的标识符

同一时刻,一个机器上的多个进程之间,PID是唯一的,不会重复的,系统内部的很多操作,都是通过PID来找到对应的进程的。

        2.内存指针

描述进程依赖的指令和数据都在内存中的那个区域。在运行exe程序之后,操作系统就会读取exe中的指令和数据,加载到内存中(内存地址),有了内存地址,就知道进程对应的指令和数据在系统的那个位置。侧面的表现出:进程的执行,是需要一定的内存资源的

        3.文件描述符表(顺序表 / 数组)

用来描述打开了那些文件,对应到硬盘上的数据,进程中打开了某个文件,就会在顺序表中添加一项。侧面表示出:进程的执行,是需要一定的硬盘资源的

        4.进程的状态 优先级 上下文 统称为进程的调度

计算机上同时存在很多进程,这些进程是需要同时进行的,该如何执行呢调配呢?CPU负责执行,CPU每个核心,可以执行一个进程(执行进程里的指令,执行过程就算取指令,分析指令,执行指令),上文有介绍,我的电脑是16核心,那么我的电脑只能同时执行16个进程,其他的线程怎么办?

操作系统的进程调度关键:分时复用

现如今的操作系统,都是多任务系统,同时可以运行多个进程。分时复用简单来说,就是同一时刻,由于切换速度非常快,就相当于CPU在同时运行多个程序。以我们的视角来看,程序的确是同时执行 -- 并发执行的。(但微观上却是一个一个的接着执行的,只不过执行的速度很快,感受不到切换的间隙罢了)

现在又有了多核心的CPU,此时,每个核心和每个核心之间,微观上也能同时执行不同的进程,微观上 --> 并行执行

并发执行:多任务在同一时间执行,强调同一时间。

并行执行:多任务在多核心上执行,强调多核心。

并发/并行执行,都是操作系统内核同一调配调度的,程序员 / 普通用户,感知不到,因此,也就同一称为”并发“,对应的编程方法,也称为”并发编程“。

进程的状态,优先级,上下文,就是用来支持并发执行的调度过程的。

        进程状态:

就绪状态:随时可以被调度到CPU上执行指令的

堵塞状态:无法调度到CPU上执行,之所以阻塞,是因为要做一些其他的工作,比如进行I/O操作(读写硬盘...)我们学过的scanf,Scanner输入就是典型的阻塞状态,它会从控制台读取输入,代码执行到这样的语句时,就会被”卡住“,是等待I/O产生的阻塞,直到输入数据后,才会继续执行。

        进程的优先级:

也就是CPU获取资源的先后顺序问题。

        进程的上下文:

分时复用,一个进程执行一会之后,就要从CPU上调度走,过一段时间,还会再调度回CPU,就要沿着上次执行的结果(之前执行的中间结果),继续向后执行

        进程的记账信息:

优先级的加持之下,使得不同的进程所能吃的资源,差异越来越大,操作系统回统计每个进程再CPU上执行的时间,从而进一步的对调度进行调整。

完!!!

相关文章:

计算机是如何工作的

目录 冯诺依曼体系 CPU基本工作流程: 逻辑门 门电路 算术逻辑单元 ALU(Arithmetic&LogicUnit) 算术单元(Arithmetic Unit) 逻辑单元(Logic Unit) ALU符号 寄存器(Register)和内存(RAM) 控制单元 CU(Control Unit) 指令(Instruc…...

Arduino、ESP32驱动GUVA-S12SD UV紫外线传感器(光照传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 UV紫外线传感器是一个测试紫外线总量的最佳传感器,它不需要使用波长滤波器,只对紫外线敏感。 Arduino UV紫外线传感器,直接输出对应紫外线指数(UV INDEX)的线性电压,输出电压范围大约0~1100mV(对应UV INDEX值…...

【NLP 48、大语言模型的神秘力量 —— ICL:in context learning】

目录 一、ICL的优势 1.传统做法 2.ICL做法 二、ICL的发展 三、ICL成因的两种看法 1.meta learning 2.Bayesian Inference 四、ICL要点 ① 语言模型的规模 ② 提示词prompt中提供的examples数量和顺序 ③ 提示词prompt的形式(format) 五、fine-tune VS I…...

面向对象软件工程实践软件案例

智力运动-数字化思维训练课程介绍 数字化思维训练是科技赋能素质教育创新实践项目,通过数字化信息化手段,深度融合优质原创智力运动教育课程资源,服务幼儿园与小学,提供信息时代校园素质教育教学解决方案。在《面向对象软件工程》…...

PX4飞控-接收MAVLINK消息(2)-生成MAVLINK_MSG_ID_***.h文件

我在自制的底板上跑vxworks操作系统中移植了MAVLINK的C库用来与PX4飞控进行通信,其中使用的C库和其他依赖文件,例如common文件夹均为从飞控源码中获取,文件获取位置为px4-Autopolite/bulid/mavlink中,因为PX4源码中自带MAVLINK的依…...

Spring Boot 连接 MySQL 配置参数详解

Spring Boot 连接 MySQL 配置参数详解 前言参数及含义常用参数及讲解和示例useUnicode 参数说明: 完整配置示例注意事项 前言 在 Spring Boot 中使用 Druid 连接池配置 MySQL 数据库连接时,URL 中 ? 后面的参数用于指定连接的各种属性。以下是常见参数…...

【数据结构】_单链表_相关面试题(二)

本章重点 hello友友们~ 今天我们将对单链表的后半部分的相关面试题进行详细解析,下面就跟着我一起开启吧~ really GO! 1.相交链表 题目: 输入两个链表,找出它们的第一个公共结点。 代码分析: //找到相交结点&#xf…...

深入理解指针(2)(C语言版)

文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组总结 前言 在上一篇文章中,我们初步了解了指针的基本概念和用法。今天,我们将继续深入探索指针在数组、函数传…...

二叉树相关算法实现:判断子树与单值二叉树

目录 一、判断一棵树是否为另一棵树的子树 (一)核心思路 (二)代码实现 (三)注意要点 二、判断一棵树是否为单值二叉树 (一)核心思路 (二)代码实现…...

redux ,react-redux,redux-toolkit 简单总结

Redux、React-Redux 和 Redux Toolkit 是协同工作的三个库,各自承担不同角色,相互协同。 Redux:基础底座 底层状态管理库,负责状态存储、Action 派发和 Reducer 执行 ​React-Redux:连接 React 组件与 Redux Store 通…...

5. 实现一个中间件

原文地址: 实现一个中间件 更多内容请关注:php代码框架 理解中间件 中间件(Middleware) 是一种在请求被路由到控制器方法之前或响应返回客户端之前执行的代码。它通常用于处理通用任务,如身份验证、日志记录、CORS 处理等。 在…...

数据库理论基础

数据库理论基础 1.1 什么是数据库 数据: 描述事物的符号记录, 可以是数字、 文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。 数据库: 存储数据的仓库,是长期存放在…...

STM32学习笔记之振荡器(原理篇)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

SQL Server安装程序无法启动:系统兼容性检查失败

问题现象: 运行 SQL Server 2022 安装程序时,提示 “硬件或软件不满足最低要求”,安装向导直接退出或无法继续。 快速诊断 操作系统版本检查: # 查看 Windows 版本(需 20H2 或更高) winver 支持的系统&…...

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…...

树形结构的工具类TreeUtil

这个地方是以null为根节点,相关以null或者0自己在TreeUtil中加代码,就行 基础类 package com.jm.common.entity;import lombok.Data;import java.util.ArrayList; import java.util.List;/*** Author:JianWu* Date: 2025/3/26 9:02*/ Data public clas…...

【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody2D)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

人员进出新视界:视觉分析算法的力量

视觉分析赋能离岗检测新策略 随着时代的发展,失业率增加,社会安保压力也随之增大。企业为了提升管理效率,保障园区安全,对员工离岗检测的需求日益迫切。传统的离岗管理方式,如人工巡逻、打卡记录等,不仅效率…...

LabVIEW液压振动锤控制系统

在现代工程机械领域,液压振动锤的高效与精准控制日益显得重要。本文通过LabVIEW软件,展开液压振动锤启停共振控制技术的研究与应用,探讨如何通过改进控制系统来优化液压振动锤的工作性能,确保其在复杂工况下的稳定性与效率。 ​ …...

Slidev使用(一)安装

文章目录 1. **安装位置**2. **使用方式**3. **适用场景**4. **管理和维护** 全局安装1. **检查 Node.js 和 npm 是否已安装**2. **全局安装 Slidev CLI**3. **验证安装是否成功**4. **创建幻灯片文件**5. **启动 Slidev**6. **实时编辑和预览**7. **构建和导出(可选…...

浙大:DeepSeek技术溯源及前沿探索

浙江大学DS系列专题《DeepSeek技术溯源及前沿探索》由朱强教授主讲,内容主要包括 语言模型、Transformer、ChatGPT、DeepSeek及新一代智能体 等核心主题。 下载方式:关注“渡江客涂鸦板”,回复ds1253免费获取下载地址 语言模型:语…...

【八股】未知宽高元素水平垂直居中的三种方法

在笔试/面试中,经常出现的一个问题就是:如何实现元素水平垂直居中? 本文会直接使用代码,介绍未知宽高元素水平垂直居中的三种方法: 方法一:绝对定位absolute //绝对定位,将元素的左右位置设置…...

23种设计模式-中介者(Mediator)设计模式

中介者设计模式 🚩什么是中介者设计模式?🚩中介者设计模式的特点🚩中介者设计模式的结构🚩中介者设计模式的优缺点🚩中介者设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...

(免费开源)图片去水印以及照片擦除功能,你会选择使用吗?

图片去水印以及相关人物擦除是一个非常小众的需求,就是将原本图片上的文字或者logo去除让变成一个干净的图片,但市面上很多都是付费的,今天就介绍一下这款免费工具。 工具演示效果 工具介绍 名称:lama-projct 利用AI模型训练LaM…...

Rust 学习笔记(一)

本文是博主学Rust的学习笔记,将学习经历整理下来,学习接收的内容更加条理且以便回顾。 参照学习资料为Rust官方文档,如内容中有误还请指点(一般没有☺) 一. 项目搭建 1.创建项目 cargo new hello_cargo cd hello_c…...

C++vector常用接口和模拟实现

C中的vector是一个可变容量的数组容器,它可以像数组一样使用[]进行数据的访问,但是又不像C语言数组空间是静态的,它的空间是动态可变的。 在日常中我们只需要了解常用的接口即可,不常用的接口查文档即可。 1.构造函数 //空构造…...

AI数据分析:一键生成数据分析报告

作为一名数据分析师,我们经常需要做一些数据分析报告,今天我就来手把手教你如何使用大模型一键生成高质量的数据分析报告,提高你的工作效率。 假设你是一家新零售企业的销售分析师,有一份销售数据,数据结构如数据结构…...

leetcode 2829. k-avoiding 数组的最小总和 中等

给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1: 输入:n 5, k 4 输出&…...

微信小程序登录和获取手机号

目录 准备工作 实现流程 实现代码 公共部分 通过code获取openid等信息 解密手机号 扩展 不借助工具类实现解密 借助工具类获取access_token 准备工作 需要小程序账号(可以去微信公众平台创建一个测试号或者正式号) appid:小程序id …...

漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)

漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…...

华鲲振宇天工TG225 B1国产服务器试装openEuler22.03 -SP4系统

今天测试了一下在华鲲振宇公司的天工TG225 B1国产服务器上进行openEuler22.03 -SP4操作系统的试装,本文记录整个测试过程。 一、服务器信息 1、服务器型号 Huakun TG225 B1 (D) 2、登录IPMI帐户信息 初始用户名Tech.ON 密码TianGong8000 二、磁盘RAID配置 测试…...

Graphpad Prism for Mac医学绘图

Graphpad Prism for Mac医学绘图 文章目录 Graphpad Prism for Mac医学绘图一、介绍二、效果三、下载 一、介绍 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件,适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试验还是学…...

单多表查询练习

课堂代码练习 mysql> select * from t_heros; ----------------------------- | id | name | books | ----------------------------- | 1 | 孙悟空 | 西游记 | | 2 | 猪八戒 | 西游记 | | 3 | 林黛玉 | 红楼梦 | | 4 | 贾宝玉…...

SICAR标准 汽车焊装生产线触摸屏操作说明

目录 SIMATIC HMI 是西门子工业自动化解决方案的核心组件,支持实时设备监控与交互,文档中展示了其在焊装生产线中以SICAR标准为基础的具体应用,包括车型切换(如 AY2/A26)、KMC 夹具配置及能源效率分析,适用…...

Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程

文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师,还是刚接触图像处理的新手&#xff0c…...

SylixOS 中 select 原理及使用分析

1、select接口简介 1.1 select接口使用用例 select 是操作系统多路 I/O 复用技术实现的方式之一。 select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状…...

F1C200S编译

一、查看荔枝派Nano的分区内容 分成了两个分区 将第一个分区通过mount进行挂载,查看到内容包括:主要是dtb设备树和zImage压缩的内核。由于u-boot不是是通过dd指令传输到指定的位置,因此这里不显示。还有一个scr,这是一个uboot启动…...

边缘计算 vs. 云计算,谁才是工业物联网的未来?

前言 在物联网(IoT)飞速发展的今天,边缘计算正在彻底改变数据的处理、存储和分析方式。传统的IoT设备数据通常需要发送到云端进行处理,但随着设备数量的激增,这种模式在延迟、带宽和安全性方面暴露出诸多局限。边缘计…...

vue 使用v-model实现父子组件传值——子父组件同步更新

基于vue2和vue3两个版本的框架略显不同&#xff0c;所以我分开的来讲&#xff1a; 1、vue2 子组件&#xff08;my-input.vue&#xff09;&#xff1a; <template><input type"text" :value"name" input"inputChange" /> </tem…...

监控易运维在北京某医药集团数字新基建项目中的应用

随着信息技术的快速发展&#xff0c;企业数字化转型已成为当今时代的趋势。北京某医药公司作为一家知名的中医药企业&#xff0c;也在积极推进数字化建设。在数字新基建招标项目中&#xff0c;监控易管理平台 6.0 凭借其强大的功能和特点&#xff0c;成功中标&#xff0c;为医药…...

小智AI音频开发 libopus + Eclipse C/C++ MinGW 编解码测试用例

小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例 目录 小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例前言移植编解码测试libopus编码器的控制参数信号类型比特率带宽编码复杂度前向纠错声道不连续传输位深帧持续时长码率VBR约束应用类型 示例代码 前言…...

Spring Boot定时任务设置与实现

Spring Boot定时任务设置与实现 在Spring Boot中&#xff0c;可以使用Scheduled注解来创建定时任务。以下是一个简单的示例&#xff0c;展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先&#xff0c;确保你的pom.xml文件中包含Spring Boot的依赖&#xff…...

海康/大华/宇视/华为/汉邦/天地伟业/英飞拓/科达/中星微/同为/天视通等主流监控设备RTSP地址

RTSP协议是TCP/IP协议体系中的一个应用层协议&#xff0c;该协议主要规定了一对多应用程序如何有效地通过IP网络传送多媒体数据&#xff0c;特别适用于音视频数据的实时传输和控制。 目前监控市场厂家众多&#xff0c;各个厂家的RTSP地址格式不尽一致 以下是海康威视、大华股份…...

FreeRTOS 队列结构体 xQUEUE 深度解析

一、核心成员与功能设计 FreeRTOS 的队列结构体 xQUEUE 是任务间通信&#xff08;IPC&#xff09;的核心数据结构&#xff0c;通过统一的设计支持队列、信号量、互斥量等多种同步机制。其设计体现了 ​**"数据拷贝 结构复用"** 的理念&#xff0c;兼顾轻量化与扩展…...

system V 消息队列信息量(了解)

目录 system V 消息队列 消息队列的基本原理 消息队列数据结构 消息队列接口介绍 消息队列相关函数 消息队列的释放 向消息队列发送数据 向消息队列接收消息 System V 信号量 信号量相关概念 信号量的数据结构 信号量相关函数 进程互斥 system V IPC联系 system V…...

CSS rem、vw/vh、less

目录 分辨率、视口与二倍图 一、分辨率与像素基础 1. 物理像素&#xff08;Physical Pixels&#xff09; 2. 逻辑像素&#xff08;CSS 像素&#xff09; 二、视口&#xff08;Viewport&#xff09;控制 1. 视口类型 2. 设置理想视口 三、二倍图&#xff08;Retina/HiD…...

CHI协议——retry

一、核心目标 防止请求阻塞&#xff1a;当Completer暂时无法处理请求(比如tracker不够被占满)时&#xff0c;通过retry机制避免请求在 REQ Channel堆积&#xff0c;确保系统流畅运行。 retry机制只存在于REQ Channel&#xff0c;在DAT/RSP/SNP Channel不存在 二、Retry Flow…...

在linux部署网站

在Linux部署网站&#xff0c;需要准备一个纯净的系统 一、系统环境准备 1.设置静态IP地址 ‌ 2.关闭默认防火墙 systemctl disable firewalld --now ‌ 3.配置SSH密钥登录 4.yum update -y && reboot # 更新系统内核 5.yum install -y wget curl unzip # 安装…...

语义网是什么

语义网&#xff08;Semantic Web&#xff09;是由万维网发明者 蒂姆伯纳斯-李&#xff08;Tim Berners-Lee&#xff09; 在20世纪90年代末提出的概念&#xff0c;目标是让互联网上的数据不仅对人类可读&#xff0c;还能被机器自动理解、关联和推理。它通过为数据添加明确的语义…...

51单片机

本文来源&#xff1a;腾讯元宝 51单片机是对所有兼容Intel 8031指令系统的8位单片机的统称&#xff0c;其技术起源于1981年Intel推出的8051内核微控制器(Micro Control Unit)。作为嵌入式系统领域的经典代表&#xff0c;它具有以下核心特点和应用价值&#xff1a; 一、技术特…...