计算机存储结构、执行速度及对应用的影响

news2024/10/3 4:00:58

万丈高楼,平地起。
计算机世界的信息化软件工程,是构筑于计算机硬件之上的。
由于信息的流转依托于计算机不同的部件,所以计算机系统的内部设计、各类应用架构无不受部件之间速度差异的影响。
本文,主要先介绍存储体系,再量化展示这种速度的差异,最后简单说一下对上层系统的影响。你就理解为什么用了缓存,会快~~

计算机存储体系

如图,从下到上,单位金钱获得的容量组件减少,但是响应的速度增大。
在这里插入图片描述

图:《深入理解计算机系统》

计算机各层次速度量化

存储体系代表了层级,是大的方向。具体落实到机器的速度,我们还要看具体指标和数值,以作参考。具体硬件的速度自然不是下表所示的值,所以最多算个示意,但内部的相对关系还是比较稳定的。

序号存储英文名称存储中文名称容量时间(纳秒)微秒毫秒CPU时钟周期数
1CPU寄存器CPU寄存器几十~几百KB0.51
2L1 cache reference读取CPU一级缓存几十~几百KB0.51
3Branch mispredict(转移、分支预测) 比如:if510
4L2 cache reference读取CPU的二级缓存几百KB~几MB714
5Mutex lock/unlock互斥锁\解锁2550
6Main memory reference内存引用(找到内存地址)几百MB~几GB1000.1200
7Compress 1K bytes with Zippy使用Zippy压缩1K字节数据300036000
8Send 1K bytes over 1 Gbps network在1Gbps的网络上发送1k字节10,000100.0140000
9Read 4K randomly from SSDSSD磁盘随机读4k150,0001500.15300,000
10Read 1 MB sequentially from memory从内存顺序读取1MB250,0002500.25500000
11Round trip within same datacenter从一个数据中心往返一次,ping一下500,0005000.51000,000
12Disk seek磁盘搜索几百GB~几TB10,000,00010,000120,000,000
13Read 1 MB sequentially from network从网络上顺序读取1兆的数据10,000,00010,000120,000,000
14Read 1 MB sequentially from SSD从SSD磁盘顺序读出1MB30,000,00030,000360,000,000
15Send packet CA->Netherlands->CA一个包的一次远程访问150,000,000150,00015300,000,000

表引自(有大的修改):https://gist.github.com/jboner/2841832
寄存器速度等于CPU时钟周期,表假设CPU的1次晶振频率0.5纳秒,对应CPU2.0GHz。

上表的主要价值在于:站在CPU时钟周期的角度来度量,各个部件之间的速度差距具体大到什么程度。

上表格,对机械磁盘的顺序读写及随机读写性能,以及SSD硬盘的顺序读写、随机读写性能,没有给出直观的数据。

业内,顺序读写性能使用容量/s来度量,随机读写性能使用IOPS(Input/Output Operations Per Second)度量。

例如SATA或M.2 SATA接口的顺序读写速度理论上可达600MB/s,而使用支持NVMe协议的M.2接口、走PCIE4.0×4通道的固态硬盘,其顺序读取速度可达7G/s。

下图是国产致态 TiPro7000固态硬盘的技术指标(存储国产已崛起):
在这里插入图片描述

CPU内部寄存器速度和DRAM内存的速度差异来源
制造工艺和成本决定。CPU内部的寄存器使用的SRAM工艺,是6个晶体管电路原件组成的,不需要刷电,频率等同CPU时钟。而DRAM内存就没那么复杂的晶体管了,造价合适,需要定期刷电(刷新)维持存储数据,这里就消耗了大量时间,是性价比的妥协。具体可见DRAM和SRAM的区别

计算机存储结构速度差异对上层应用的影响

核心就一句话:运用时间和空间局部性原理,上一层级做下一层级的缓存。上一层没有,再去下一层拿。

所谓时间和空间局部性原理,意思就是最近使用和访问的地址及附近地址空间,大概率还会被使用。先留一份在这一层,下次再用的时候,就不用取了。

可参考:缓存技术原理

下面说几个大家可能都知道缓存场景。

客户端访问服务器,网络io的耗时是很慢的,提速有什么方案?直接把数据存在用户本地一份。背后原理是什么?读取本地磁盘耗时,比网络耗时短。

为什么很多高并发场景要加redis缓存,大家都知道redis在内存里,很快。但是有多快?上表访存200 比60,000,000,当然这里面一个是寻址,一个是读1M,没可比性。内存通常的传输速率是以G/s为单位的,比如DDR4内存读写速度大概50G每秒(50000M),固态硬盘读肯定走的是随机读,按致钛最低速度来550000 * 4k / 1024 = 2148M/s,速度差距的数量级在20倍附近,这只是理论值,实际当中有偏差,而且也不可能每一个读取单元都是4k,所以基本可以估计是10-100这个量级的速度差。

再一个CPU内部的L1 2 3级缓存的作用。

再来一个,mysql的主从复制为什么能支持实际的场景,无他,顺序读,顺序写,秒级量完全够来自网卡的流量。

又比如,磁盘内部,也存在缓存这一硬件,目的就是增强磁盘的吞吐。

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

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

相关文章

Spring Security 授权体系结构

目录 1、Authorities 授权(AuthorizationFilter 过滤器) 2、AuthorizationManager 授权管理器 3、角色的层次化(Roles) 1、Authorities 授权(AuthorizationFilter 过滤器) 通过 Authentication.getAutho…

Spring基础知识讲解

文章目录 Spring是什么?IoC容器与DIDI与IoC的区别 Spring项目的创建配置maven国内源创建Spring项目有关Bean的操作存储Bean使用Bean ApplicationContext和BeanFactory的区别getBean()的三种使用方法 更简单的存储和获取对象类注解方法注解获取Bean对象的简单方法——…

Ubuntu18.04下安装ROS

安装相关依赖 sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip ----------------------------------------------------------------…

TCP/IP 介绍

一、TCP/IP 是什么 TCP /IP 是因特网通信协议 (注释:通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。) 因特网浏览器和因特网服务器均使用 TCP/IP 来连接因特网。浏览器使用 TCP…

Idea 避免import *

File -> setting -> Editor -> Code Style -> Java -> Imports

详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 引言一、查询单行数据返回单个对象二、查询多行数据返回对象的集合三、 查询单行数据返回Map[Key,…

pandas学习

(个人学习使用) 添加索引 # index是行索引,columns是列索引 pd.DataFrame(score, indexidx, columnscol) 常用属性和方法 data.shape # 形状 data.index # 行索引 data.columns # 列索引 data.values # 里面的值,结果是ndarray类型数组 …

SpringBoot登陆+6套主页-【JSB项目实战】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具:上效果图主页登陆 配置文件设置导数据库项目目录如图:代码部分:控制器过滤器详细的解…

docker Registry私有仓库

一、docker自带的本地私有仓库配置 #首先下载registry镜像 docker pull registry#在daemon.json文件中添加私有仓库地址 vim /etc/docker/daemon.json {"insecure-registries": ["192.168.60.11:5000"], #添加,注意用逗号结尾"registr…

验证码登录如何实现?

手机验证码登录 1、需求分析2、数据模型3、代码开发-交互过程4、代码开发-准备工作5、代码开发-修改LoginCheckFilter6、代码开发-接口开发7、前端代码介绍8、启动测试 1、需求分析 为了方便用户登录,移动端通常都会提供通过手机验证码登录的功能。 手机验证码登录…

Android性能优化之修复游戏中内存泄漏(java层)

游戏在bugly上内存OOM越来越严重,因此,近期对内存进行优化。从java层的内存进行优化开始,通过LeakCannary或者adb shell 获取到内存快照,发现好几处内存泄漏点。 1.单例类持有Activity: 查看内存快照,该闪…

MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

文章目录 数值型关联变量数值型关联变量的种类介绍 单选按钮与复选框单选按钮的组内选择原理解析单选按钮和复选框以及应用数值型关联变量的开发CMainDlg.cppCInputDlg.hCInputDlg.cpp 附录 数值型关联变量 数值型关联变量的种类介绍 1、 数值型关联变量: a)控件型…

STM32MP157驱动开发——按键驱动(异步通知)

文章目录 “异步通知 ”机制:信号的宏定义:信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制: 信号的宏定义&#x…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤,这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右,所以在学习js前是需要学习html和css 的,这两部分不用花特别多的时间(虽然css如果想做一些非常炫酷的效果个人认为…

记一次容器环境下出现 Address not available

作者:郑明泉、余凯 困惑的源地址 pod 创建后一段时间一直是正常运行,突然有一天发现没有新的连接创建了,业务上是通过 pod A 访问 svc B 的 svc name 的方式,进入 pod 手动去 wget 一下,发现报错了 Address not avai…

Roslyn 动态编译

NET 编译器平台(.NET Compiler Platform) 也称为Roslyn,是Microsoft的一组用于C#和Visual Basic (VB.NET) 语言的开源 编译器和代码分析 API。 该项目特别包括C# 和 VB.NET 编译器的自托管版本——用语言本身编写的编译器。编译器可通过传统…

vue2路由(个人学习笔记四)

目录 友情提醒第一章、路由简介1.1)什么是路由1.2)安装路由插件 第二章、自定义路由器2.1)创建路由器文件index.js文件2.2)index.js文件中配置路由信息 第三章、使用路由器3.1)在main.js文件中将路由器绑定到Vue对象3.…

查看maven发布时间的方法

查看maven发布时间的方法如下【 打开maven官网 选中Release Notes 即可查看对应版本的发布时间 】

【Linux命令200例】cmp文件比较工具

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

微信小程序开发知识点总结(不断补充)

一、怎样实现小程序与数据库的交互原理 微信小程序开发里面是不能直接写数据库连接文件,如果要实现与数据库的交互,就需要用到中间的接口。(这个接口可以理解成springboot项目中controller层的RequestMapping的URL)具体用法如下&…