【JavaEE】 简单认识CPU
🐵本篇文章将对cpu的相关知识进行讲解

一、认识CPU
下图是简略的冯诺依曼体系结构图

上图中,存储器用来存储数据,注意在存储器中都是以二进制的形式存储数据的,CPU就是中央处理器,其功能主要是进行各种算术运算和各种逻辑判断
我们在计算机上运行的任何一个程序,本质上都是在CPU上运行的,接下来再结合任务管理器来对CPU进行讲解
1.1 占有率和频率

上图中,“3%” 就是CPU占有率
举个例子:假如一个人上班总时间为8小时,但他用4小时就完成了今天的工作,此时称CPU占有率为50%,计算机中运行的程序并非都是全力的工作,通过计算每一个程序的CPU占有率,最终算得的总占有率就是上图中显示的
“3.03GHz” 就是CPU频率
CPU频率用来描述CPU工作的效率,数字越大,工作效率越快,CPU频率也可以简单认为1s执行多少个指令/计算了多少次
CPU频率还有基础频率和最大睿频的概念,基础频率就是CPU保底的工作效率,最大睿频就是CPU最高能达到的工作效率
1.2 核心
以前的CPU都是单核心CPU,要想提高这种CPU的性能,就必须增加其内部的集成原件的数量,那么就得让每个单位原件更小,但是并不能无限小下去,单核CPU就达到了发展瓶颈
于是就有了多核心CPU,现在的计算机大多都是多核心CPU

内核为物理核心,逻辑处理器是逻辑核心,买电脑时看到的8核 16线程就是这个意思(这里有一个简单的了解就行)
CPU是多核心的,但每一个核心的工作效率是一样的,所以在设计程序时为了提高工作效率,就得做到合理分配,把要完成的任务交给不同的核心去完成,这也就是我们后续要研究的“多线程编程”
1.3 缓存
寄存器是CPU内部存储数据的模块,在存储空间上:硬盘 > 内存 > 寄存器,在速度上:寄存器 > 内存 > 硬盘;寄存器和内存大概差3~4个数量级,内存和硬盘又差3~4个数量级,由于速度差异过大,CPU提供了缓存模块

上述CPU中有3个缓存,对于缓存数字越小,速度越快,空间越小
有些要频繁使用的数据如果存在内存中,CPU要频繁从内存中读取,这样速度会比较慢,因此可以将这些要高频使用的数据放到缓存中
CPU在读取指令时,先看缓存中有没有,如果有直接从缓存中读取,没有则从内存中读取
二、CPU如何执行指令
2.1 CPU执行指令的步骤
CPU执行指令分为3个步骤:
1. 读指令:将内存中的指令数据读取到CPU的寄存器中
2. 解析指令
3. 执行指令
2.2 指令
指令就是指导CPU工作的命令,主要由 操作码+操作数 组成,操作码就是指令的编号,操作数就是接下来通过指令要操作的数据
下图是一个指令表:

每一个CPU被设计出来时都会提供一个指令表
2.3 CPU如何读到指令
写完一个Java程序,就会生成一个 .java 的源文件,经过编译后生成 .class 的二进制字节码文件,之后运行程序时JVM会把 .class 文件加载到内存中,在内存中进一步被翻译为CPU认识的二进制指令
写完一个C程序,就会生成一个 .c 的源文件,经过编译后生成 .exe 的二进制文件,之后运行程序时操作系统会把 .exe 文件加载到内存中,在内存中进一步被翻译为CPU认识的二进制指令
CPU中有一个专门的寄存器保存接下来要从哪个内存地址取指令(在不同的CPU中可能叫不同的名字,在有些操作系统书中称其为“程序计数器”简称“pc”)
此处假设从0号地址开始读取,CPU每次读取执行完一个指令之后,就会自动把pc中的值+1,即顺序取下一条指令(有些情况会遇到跳转类指令,此时就根据设置的地址进行取地址)

接下来通过具体的操作进一步熟悉CPU执行指令的过程
2.4 模拟操作
第一轮操作:
读取指令:从0号地址读取到 00101110
解析指令:操作码:0010;操作数:1110(10进制:14),通过查询指令表该指令就是将14号地址的数据加载到A寄存器中
执行指令:将14号地址的数据:00000011(10进制:3)加载到A寄存器中
第二轮操作:
读取指令:顺序读取1号地址指令:00011111
解析指令:操作码:0001;操作数:1111(10进制:15),通过查询指令表该指令就是将15号地址的数据加载到B寄存器中
执行指令:将15号地址的数据:00001110(10进制:14)加载到B寄存器中
执行到这一步:CPU中,寄存器A:3,寄存器B:14
第三轮操作:
读取指令:顺序读取2号地址指令:10000100
解析指令:操作码:1000;通过查指令表,此处是将两个寄存器的数据求和并将求和后的数据加载到第二个寄存器,操作数:0100,此处的01 和 00 就代表两个寄存器的id,id是在CPU设计出来的时候提前约定好的,这里就假定01:B,00:A
执行指令:AB寄存器中数据求和等于17 并将其加载到A中
此时CPU中,寄存器A:17,寄存器B:14
第四轮操作:
读取指令:顺序读取3号地址指令:01001101
解析指令:操作码:0100;操作数:1101(10进制:13),通过查指令表,此处将A寄存器中的数据加载到13号地址处
执行指令:13号地址的数据:00000000 -> 00010001(17的二进制形式)
第五轮操作:
读取指令:顺序读取4号地址指令:00000000
解析指令:操作码:0000;操作数:0000,指令表中没有0000的操作码,一般认为程序运行结束
执行指令:程序退出
🙉本篇文章只是对CPU进行了大致的了解,接下来会对操作系统的相关知识进行讲解
相关文章:
【JavaEE】 简单认识CPU
🐵本篇文章将对cpu的相关知识进行讲解 一、认识CPU 下图是简略的冯诺依曼体系结构图 上图中,存储器用来存储数据,注意在存储器中都是以二进制的形式存储数据的,CPU就是中央处理器,其功能主要是进行各种算术运算和各种…...
《数字图像处理-OpenCV/Python》第17章:图像的特征描述
《数字图像处理-OpenCV/Python》第17章:图像的特征描述 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第17章:图像的特征描述 特征检测与匹配是计算机视觉的…...
考研数学什么时候开始强化?如何保证进度不掉队?
晚了。我是实在人,不给你胡乱吹,虽然晚了,但相信我,还有的救。 实话实说,从七月中旬考研数一复习完真的有点悬,需要超级高效快速... 数二的时间也有点紧张... 中间基本没有试错的时间,让你换…...
Node.js的下载、安装和配置
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
java.util.Properties类介绍
java.util.Properties 是 Java 编程语言中的一个类,用于管理应用程序的配置信息,它继承自 java.util.Hashtable 类,因此它也是基于键值对的数据结构。主要用途是存储应用程序的配置参数,比如数据库连接信息、用户设置等。 以下是 Properties 类的一些主要特点和用法: 存储…...
SpringBoot后端验证码-防止密码爆破功能
一、简介 为了防止网站的用户被通过密码典爆破。引入验证码的功能是十分有必要的。而前端的验证码又仅仅是只防君子不防小人。通过burpsuit等工具很容易就会被绕过。所以后端实现的验证码才是对用户信息安全的一大重要保障。 实现思路: 1.引入图形生成的依赖 2.生成…...
ChatEval:通过多代理辩论提升LLM文本评估质量
论文地址:ChatEval: Towards Better LLM-based Evaluators through Multi-Agent Debate | OpenReviewText evaluation has historically posed significant challenges, often demanding substantial labor and time cost. With the emergence of large language models (LLMs…...
关于美国服务器IP的几个常见问题
在租用美国服务器时,与之密切相关的一个要素就是IP,关于IP的问题总是有人问起,这里列举几项常见的问题,以供参考。 一、IP收费吗? 一般情况下,在租用服务器时,会赠送几个IP,因为这些…...
redis运维:sentinel模式如何查看所有从节点
1. 连接到sentinel redis-cli -h sentinel_host -p sentinel_port如: redis-cli -h {域名} -p 200182. 发现Redis主服务器 连接到哨兵后,我们可以使用SENTINEL get-master-addr-by-name命令来获取当前的Redis主服务器的地址。 SENTINEL get-master-a…...
价格疑云?格行WiFi创始人亲解谜团,性价比之王如何炼成?
随身wifi行业乱象频出,作为行业领跑品牌的格行随身wifi,关于价格问题一直备受质疑。关于设备上的“格行自有格行的骄傲”也被外界认定为是自大,甚至发展的线下一万多家门店也被同行不认可。近日,企业财经专访记者有幸采访了格行随…...
揭秘“消费即赚”的循环购模式
大家好,我是吴军,今天我将带您深入探索一种颠覆传统的新型商业模式——循环购模式。在这个模式中,消费者不仅能享受到购物的乐趣,还能通过消费获得实实在在的回报,甚至实现“边消费边赚钱”的奇妙体验。您是否好奇&…...
javaweb个人主页设计(html+css+js)
目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码,但是图片已省略,可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩ÿ…...
Android常用设计模式(小白必看)
不要担心冗长,3分钟解决面试和学习问题,收藏再看 目的:当作一种模板,结合自身特点,针对项目需求来使用 目录 单例模式 特点: 实现方式: 1、饿汉式 2、线程安全的懒汉式 3、双重校验锁 使…...
swift获取app网络和本地网络权限
请求蓝牙权限: //蓝牙if #available(iOS 13.1, *) {let autostate CBManager.authorizationif(autostate .notDetermined){print("")self.manager CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPo…...
用LangGraph、 Ollama,构建个人的 AI Agent
如果你还记得今年的 Google I/O大会,你肯定注意到了他们今年发布的 Astra,一个人工智能体(AI Agent)。事实上,目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体(AI …...
ubuntu20.04系统编译yolov8-obb.cpp代码记录
任务内容 在做ncnn-yolov8-obb模型安卓端移植的过程中,对开源代码进行调试。为了确认开源代码yolov8-obb.cpp可以移植开发,先对代码进行复现。因此在linux系统下编译yolov8-obb.cpp代码,验证项目中的代码是可运行的。然后再把这个代码中的模…...
JavaScript的数组与函数
数组 <script type"text/javascript">/** 知识点:数组* 理解:一维数组的容器* 概念:* 1.数组中的数据叫做元素* 2.元素都有编号叫做下标/索引* 3.下标从0开始* 注意:* 1.数组作为数据的容器…...
opencv--把cv::Mat数据转为二进制数据的保存和读取
保存 #include <opencv2/opencv.hpp> #include <iostream> #include <fstream>void saveMatToBinary(const cv::Mat& mat, const std::string& filename) {std::ofstream ofs(filename, std::ios::binary);if (!ofs.is_open()) {std::cerr <<…...
【微信小程序开发实战项目】——个人中心页面的制作
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
基于MCU平台的HMI开发的性能优化与实战(下)
继上篇《基于MCU平台的HMI开发的性能优化与实战(上)》深入探讨了提升MCU平台HMI开发效率和应用性能的策略后,本文将专注于NXP i.MX RT1170 MCU平台的仪表盘开发实践。我们将重点介绍Qt for MCUs的优化技巧,展示如何通过实际案例应…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
