【计算机组成原理】一文快速入门,很适合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. 主存速度够快吗?
  2. 主存容量够大吗?价格够低吗?

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将会一目了然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/59740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode漂亮配色方案

有需要的私自,付费

云原生简介 (Cloud Native)

云原生(cloud Native) 云原生的概念诞生于10年前,netflix 在 AWS 上的一次演讲中。有趣的是当初没有明确的定义,现在也没有明确的定义,对不同的人来说,有不同的概念。 概念 云原生:是在云上构…

热烈祝贺蜀益表面处理成功入选航天系统采购供应商库

经过航天系统采购平台的严审,眉山市蜀益表面处理科技有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台,服务航天全球范围千亿采购需求,目前,已有华为、三一重工、格力电器、科大讯飞等企…

香橙派OrangePi zero H2+ 驱动移远4G/5G模块

目录 1 安装系统和内核文件: 1.1 下载镜像 1.2 内核头安装 1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具: 2.1 Installing Required Host Utilities 3 驱动步骤: 3.1 下载模块驱动文件…

STM32注入通道

什么是注入通道? 注入通道是ADC的一种采样方式,主要用于在规则通道转换期间并行处理快速变化信号的采样。注入通道的转换可以在规则通道转换时强行插入,相当于一个“中断通道”。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执…

Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片,Kotlin

Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片&#xff0c;Kotlin <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.RE…

Go 数组

数组用于在单个变量中存储相同类型的多个值&#xff0c;而不是为每个值声明单独的变量。 声明数组 在Go中&#xff0c;有两种声明数组的方式&#xff1a; 使用var关键字&#xff1a; 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…

C++中的运算符总结(6):移位运算符

C中的运算符总结&#xff08;6&#xff09;&#xff1a;移位运算符 10、按位右移运算符&#xff08; >>&#xff09;和左移运算符&#xff08; <<&#xff09; 移位运算符将整个位序列向左或向右移动&#xff0c;其用途之一是将数据乘以或除以 2 n 2^n 2n。 下…

算法-图BFS/DFS-单词接龙

算法-图BFS/DFS-单词接龙 1 题目概述 1.1 题目出处 https://leetcode-cn.com/problems/number-of-islands 1.2 题目描述 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典&#xff0c;找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如…

C++八股记录

C内存管理 C中&#xff0c;内存分成5个区。 栈&#xff1a;函数内局部变量&#xff1b;自动管理&#xff0c;效率高&#xff0c;但空间较小&#xff1b; 堆&#xff1a;new分配的内存块&#xff1b;手动管理&#xff0c;效率低&#xff0c;但空间大&#xff1b; 自由存储区&…

Linux 常用命令大全

一、基本操作命令 //------首先先来几个热键&#xff0c;非常方便&#xff0c;一定要记住------// Tab ------按键—命令补齐功能Ctrlc ------按键—停掉正在运行的程序Ctrld ------按键—相当于exit&#xff0c;退出Ctrll ------按键—清屏 1.1 关机和重启 1. 关机命令&am…

弯道超车必做好题集锦三(C语言选择题)

前言&#xff1a; 编程想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我开启了一个弯道超车必做好题锦集的系列&#xff0c;每篇大约10题左右。此为第三篇选择题篇&#xff0c;该系列会不定期更新&#xff0c;后续还会…

全面解析MES系统中的报工操作

一、报工操作的定义&#xff1a; 报工操作是指在生产过程中&#xff0c;操作员通过MES系统记录和提交生产工序的相关信息&#xff0c;如工时、产量、质量等。报工操作将生产过程中的实际情况反馈给MES系统&#xff0c;实现生产数据的实时采集和记录。 二、报工操作的流程&…

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…

shell脚本:在curl命令中传递变量、单引号 ‘ 和双引号 “区别、时间戳获取、生成UUID

在curl命令中传递变量 在curl中引用变量时要加个转义 “” 如&#xff1a; #!/bin/sh timestamp$(($(date %s%N)/1000000)) curl http://xx -H "Content-Type:application/json" -X POST -d {"timestamp": ""${timestamp}""}单引…

常见前端面试之VUE面试题汇总七

20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上 手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…

universal robot 机械臂 官方基本教程

https://academy.universal-robots.cn/modules/e-Series-core-track/Chinese/module3/story_html5.html?courseId2166&languageChinese 教程1 控制箱内部 包含&#xff1a; 主机板&#xff0c;SD卡&#xff0c;和安全控制板 安全控制板负责所有控制信息&#xff0c;包括…

Ansible学习笔记(持续更新)

Ansible学习目录 1.自动化运维1.1 企业实际应用场景1.1.1 Dev开发环境1.1.2 测试环境1.1.3 发布环境1.1.4 生产环境1.1.5 灰度环境 1.2 程序发布1.3 自动化运维应用场景1.4 常用自动化运维工具 2.Ansible介绍和架构2.1 Ansible特性2.2 Ansible架构2.2.1 Ansible主要组成部分2.2…

LeetCode(力扣)617. 合并二叉树Python

LeetCode617. 合并二叉树 题目链接代码 题目链接 https://leetcode.cn/problems/merge-two-binary-trees/ 代码 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

c# 使用了 await、asnync task.run 三者结合使用

在 C# 异步编程中&#xff0c;await 和 async 关键字结合使用可以让你更方便地编写异步代码&#xff0c;而无需直接使用 Task.Run。然而&#xff0c;有时候你可能仍然需要使用 Task.Run 来在后台线程上执行某些工作&#xff0c;这取决于你的代码逻辑和需求。 await 和 async 关…