【计算机组成原理】一文快速入门,很适合JAVA后端看
作者简介:
CSDN内容合伙人、CSDN新星计划导师、JAVA领域优质创作者、阿里云专家博主,计算机科班出身、多年IT从业经验、精通计算机核心理论、Java SE、Java EE、数据库、中间件、分布式技术,参加过国产中间件的核心研发,对后端有自己独到的见解。
目录
1.概述
2.计算机由哪些部分组成
3.计算机各部分之间如何通信
4.数据如何存储
5.计算机如何与外界进行通信
1.概述
在实际的JAVA后端开发中,我们会经常碰见一些性能问题,这些性能问题很多其实都是因为现代计算机的基础架构自身存在着绕不过去的短板,而很多性能优化的方法其实就是围绕着如何补这个短板而展开的。
例如因为读数据库(读磁盘)很慢,而产生的redis之类的缓存技术,又例如IO很慢,JAVA从BIO从而升级了NIO,在其中提出了零拷贝的解法。
了解计算机的基础架构,能让我们在看待后端技术时,拥有更高的视角,会发现其实搞来搞去归根结底就是为了补全那么几个地方的缺陷,使得纷繁复杂且抽象的知识很快就能归类起来,而且更加容易类推,使得学习无往不利。
博主之前写过一个系列的《计算机组成原理》,是专门针对后端方向来写的。本文可以理解为是该系列的清单。本文将依次讲述:
- 计算机由哪些部分组成
- 各部分之间如何通信
- 数据如何存储
- 计算机如何与外界进行通信
(注:本文的所有图片均来自博主以前的文章,那时候的ID还不是现在这个,均属自产自销。)
2.计算机由哪些部分组成
文章链接:
计算机组成原理(1)概论_pc机内存储器由半导体存储器组成,可分为 ddr3和()两大类。__BugMan的博客-CSDN博客
我们现在使用的计算机的设计与实现,均遵循1946年美籍匈牙利科学家冯·诺伊曼提出的“冯诺依曼体系”,该体系简单总结起来即为,计算机有五大部分组成:内部有运算器、控制器、存储器;外部有输入、输出设备。
- 内部
- 运算器,ALU(算术逻辑单元),执行算术逻辑运算以及位移循环等操作。常说的计算机的位数,也就是运算器的一个数据单元的宽度,8位、16位、32位、64位。
- 控制器,CU,产生控制命令,控制全机。
- 存储器,,用二进制的方式存储数据和程序。
- 外部
- 输入设备,输入信息
- 输出设备,输出信息
3.计算机各部分之间如何通信
文章链接:
计算机组成原理(2)总线_单总线和双总线的区别__BugMan的博客-CSDN博客
计算机的五大组件我们已经知道了,但是五大组件都是各自独立的,要让他们携手起来一起工作,还需要一样东西将他们串联起来,这样东西就是——总线。
总线系统是计算机内部各个组件之间进行数据传输和通信的物理连接和控制机制。总线可以看作是一组并行的电子线路,用于传递指令、数据和控制信号。总线系统在计算机的内部连接各种硬件组件,如中央处理器(CPU)、内存、输入输出设备等,实现它们之间的协调工作。
总线一共有三种:
-
数据总线
传输数据信息
-
地址总线
传输数据总线上传输的数据在内存中的地址
-
控制总线
传输控制信号,如中断信号、复位信号、就绪信号等。
加上总线后,整个计算机的架构应该长这样:
4.数据如何存储
文章链接:
计算机组成原理(3)存储器_计组数据总线等于储存容量__BugMan的博客-CSDN博客
计算机除了需要CPU来完成运算和控制功能以外,还需要有一个存储体系来存储数据。现代计算机的存储结构采用的一个多级结构:
数据从最底层的硬盘上一层层的加载进上层,最终给CPU,之所以将存储体系构架成这样,是因为构建一个合理的存储体系会涉及以下问题:
- 主存速度够快吗?
- 主存容量够大吗?价格够低吗?
1.主存速度够快吗?
按照摩尔定律,计算机的CPU上晶体管每18个月数量会翻一倍,因此CPU的读写速度现阶段要远远高于主存的读写速度。
CPU是一个食客,主存是个厨子,食客吃菜的速度肯定比厨子做菜的速度快的多,这时候食客等待的这段时间就被浪费掉,对应于CPU来说就是未被充分利用起来,大段时间处于空转、等待。
解决办法就是做成自助餐,放在餐台上,让餐台这个设施去平衡食客和厨子之间速率的不匹配。至于食客到底想吃什么?会有一个算法去自动计算,计算出食客可能想吃的是什么。
这个餐台就是位于CPU和主存之间的高速缓冲存储器(cache)
2.主存容量够大吗?价格够低吗?
存储设备的价格和读写速度是成正比的,基于成本考虑计算机中的存储设备不可能都用主存级读写速度的。因此更为合理的架构是——主存+辅存,主存就是内存条,辅存就是硬盘,主存读写速度较快,价格高,容量小,存放计算机当前需要的热数据,辅存中读写速度较慢,价格低,容量大,存放冷数据。手机的诸如8+128,4+64就是指的内存和主存。
5.计算机如何与外界进行通信
链接:
计算机组成原理(4)IO_计算机组成原理io设备__BugMan的博客-CSDN博客
计算机的输入/输出(I/O,Input/Output)是指计算机与外部设备之间的数据交换过程。在JAVA后端,IO优化是性能优化上很重要的一点,其实JAVA的IO模型就是对计算机的IO模型进行的二次封装,搞明白计算机的IO模型,对编程语言的IO将会一目了然。
相关文章:

【计算机组成原理】一文快速入门,很适合JAVA后端看
作者简介: CSDN内容合伙人、CSDN新星计划导师、JAVA领域优质创作者、阿里云专家博主,计算机科班出身、多年IT从业经验、精通计算机核心理论、Java SE、Java EE、数据库、中间件、分布式技术,参加过国产中间件的核心研发,对后端有…...

10万字智慧政务大数据平台项目建设方案222页[Word]
导读:原文《10万字智慧政务大数据平台项目建设方案222页[Word]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 1.1 项目建设目标 推进市一级政府搭建数字政府建设的规划要求,结合市一级政府“互联网+政务服务”建设…...

Python-主线程控制子线程-4
需求:在Python-主线程控制子线程-3的基础上,新增使用UDP接收指令功能,代替从键盘输入指令 # 修改后的程序,主线程可以获取子线程的结果 import threading import time import queue import tracebackfrom loguru import logger i…...

设计模式二十二:策略模式(Strategy Pattern)
定义一系列算法,将每个算法封装成独立的对象,并使这些对象可互相替换。这使得在运行时可以动态地选择算法,而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离,使得客户端可以根据需要灵活地选择和切换…...

【c语言】结构体内存对齐,位段,枚举,联合
之前学完结构体,有没有对结构体的大小会很疑惑呢??其实结构体在内存中存储时会存在内存对齐,捎带讲讲位段,枚举,和联合,跟着小张一起学习吧 结构体内存对齐 结构体的对齐规则: 第一个成员在与结…...

干货丨软件测试行业迎来新时代,AI将成为主流技术?
随着科技日新月异的发展,人工智能正逐渐渗透到我们生活的各方各面,从智能语音助手到自动驾驶汽车、从智能家居到人脸识别技术,AI正以其卓越的智能和学习能力引领着新时代的发展方向。 在这个快速演进的时代中,软件测试领域也受到了…...

MacOS goland go1.21 debug问题
安装dlv brew install dlv 安装之后在终端会显示所在目录 类似/usr/local/Cellar/delve/1.21.0/bin 配置goland 在文件系统中找到goland 右击选择show package contents -> Contents -> plugins -> go 尝试替换 其中对应系统 的 dlv 结果还是不行 然后打开应用gol…...

python 笔记(1)——基础和常用部分
目录 1、print 输出不换行 2、格式化输出字符串 3、浮点数的处理 4、进制转换和ASCII与字符间的转换 5、随机数 6、字符串截取和内置方法 6-1)字符串截取 6-2)字符串内置方法 7、元组、列表,及其遍历方式 7-1)列表常用内…...

kafka架构和原理详解
Apache Kafka 是一个分布式流数据平台,用于高吞吐量、持久性、可扩展的发布和订阅消息。它具有高度的可靠性,被广泛用于构建实时数据流处理、日志收集和数据管道等应用。 基本架构 1. 主题(Topic): 主题是消息的逻辑分类生产者将消息发布到特定的主题中,而消费者可以订阅…...

wsl Ubuntu中非root的普通用户怎么直接执行docker命令
docker需要root权限,如果希望非root用户直接使用docker命令,而不是使用sudo,可以选择将该用户加入到docker用户组。 sudo groupadd docker:添加到groupadd用户组(已经有docker用户组,所以可以不用再新增do…...

Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)
一 Web开发模式 1. 前后端混合开发模式 前后端混合开发模式是一种开发方式,将前端和后端的开发工作结合在一起,以加快项目的开发速度和 提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中,前端和…...

<AMBA总线篇> AXI总线协议介绍
目录 01 AXI协议简介 AXI协议特性 AXI协议传输特性 02 AXI协议架构 AXI协议架构 write transaction(写传输) read tramsaction(读传输) Interface and interconnect 典型的AXI系统拓扑 03 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程…...

一个简单的Python网络爬虫教程
网络爬虫是一种自动获取网页内容的程序,它可以从互联网上的网站中提取数据并进行分析。本教程将带您逐步了解如何使用 Python 构建一个简单的网络爬虫。 注意:在进行网络爬虫时,请遵守网站的使用条款和法律法规,避免对目标网站造…...

YARN资源管理框架论述
一、简介 为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性,并消除早期MapReduce框架中的JobTracker性能瓶颈,开源社区引入了统一的资源管理框架YARN。 YARN是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离&…...

Unity查找资源依赖关系
这个方法主要是发现资源乱用的情况,对应的逻辑可能要改一个才能用到自己的项目里面 [MenuItem("Tools/Prefab/查找选中资源依赖关系", false, 0)] public static void FindDependencies() { foreach (var guid in Selection.assetGUIDs…...

【操作系统】聊聊局部性原理是如何提升性能的
对于目前数据主导的系统,大多数都是Java/Go 技术栈MySQL,但是随着时间的推移,数据库数据的数据量过多,并且会频繁访问热点数据,为了提升系统的性能,一般都是加入缓存中间件、Redis。 局部性原理 我们知道…...

多线程应用——单例模式
单例模式 文章目录 单例模式一.什么是单例模式二.如何实现1.口头实现2.利用语法特性 三.实现方式(饿汉式懒汉式)1.饿汉式2.懒汉式3.线程安全的单例模式4.双重检查锁5.禁止指令重排序 一.什么是单例模式 单例模式(Singleton Patternÿ…...

几种在JavaScript中创建对象的方式!
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字面量方式⭐ 构造函数方式⭐ Object.create()方式⭐ 工厂函数方式⭐ ES6类方式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…...

java项目mysql转postgresql
特殊函数 : mysql: find_in_set(?, ancestors) postgresql: ? ANY (string_to_array(ancestors,,)) mysql: date_format(t1.oper_time, %Y-%m-%d) postgresql: rksj::date to_char(inDate,YYYY-MM-DD) mysql&am…...

SpringBoot Mybatis 多数据源 MySQL+Oracle
一、背景 在SpringBoot Mybatis 项目中,需要连接 多个数据源,连接多个数据库,需要连接一个MySQL数据库和一个Oracle数据库 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId&…...

(笔记五)利用opencv进行图像几何转换
参考网站:https://docs.opencv.org/4.1.1/da/d6e/tutorial_py_geometric_transformations.html (1)读取原始图像和标记图像 import cv2 as cv import numpy as np from matplotlib import pyplot as pltpath r"D:\data\flower.jpg&qu…...

【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息
【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息 文章目录 一、前言二、安装和基础使用三、不同平台的支持情况四、如何自定义 Toast五、在实际业务中的应用六、完整的业务代码示例(基于 Web 端)七、总结 一、前言 在这篇文章中,…...

nowcoder NC236题 最大差值
目录 题目描述: 示例1 示例2 题干解析: 暴力求解: 代码展示: 优化: 代码展示: 题目跳转https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId128&tqId33768&ru/exa…...

TCP/IP五层模型、封装和分用
1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址:表示计算机的位置,分源IP和目标IP;举个例子:买快递,商家从上海发货,上海就是源IP&…...

LeetCode 面试题 01.08. 零矩阵
文章目录 一、题目二、C# 题解 一、题目 编写一种算法,若M N矩阵中某个元素为0,则将其所在的行与列清零。 点击此处跳转题目。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示…...

Qt应用开发(基础篇)——进度条 QProgressBar
一、前言 QProgressBar类继承于QWidget,是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度,比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念,让用户知道程序还在正常的执行中。 …...

108页石油石化5G智慧炼化厂整体方案PPT
导读:原文《108页石油石化5G智慧炼化厂整体方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容,...

Codeforces 1625E2 括号树 + BIT
题意 传送门 Codeforces 1625E2 Cats on the Upgrade (hard version) 题解 首先利用栈将原始字符串转换为合法的 RBS,不能匹配的括号设为 ‘.’。根据匹配的括号序列构造树,具体而言,遇到左括号,则新建节点向下递归,…...

PHP命令行CLI的使用
PHP命令行界面 PHP命令行界面(CLI)是一种使用命令行(终端)来运行PHP脚本的方式,与在Web服务器环境下运行PHP不同。CLI提供了一种与操作系统交互的方式,能够在命令行中直接执行PHP代码。 以下是一些与PHP命…...

近期嵌软线下笔试题记录
1、以下代码的输出结果是? #include <stdio.h> #include <string.h>int main() {int a,b,c,d;a 10;b a; //a先赋值给b,然后自增1c a; //a自增1后赋值给cd 10*a; //先进行运算然后a自增1printf("b,c,d:%d…...