【JMM内存模型-4】JMM内存模型之CPU缓存策略

简介: 【JMM内存模型-4】JMM内存模型之CPU缓存策略

CPU缓存策略原理

缓存概述

CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构

cpu缓存策略图

image-befe0fe78f34497ca8d0883a0097c939.png

cpu读取数据时, 会先从自己的寄存器当中读取.如果没有再从Cache当中读取数据.如果Cache当中也没能.再从内存当中获取.然后再依次缓存

多核CPU结构图

image-41ad077489cd4cc382685eed9fd2489d.png

三级缓存

L1 Cache
 分为数据缓存和指令缓存,逻辑核独占
  CPU所有操作的数据全部在寄存器当中完成
 寄存器比L1要快
 离CPU内核最近
 内核独享
 L1一种存指令,一种存数据
L2 Cache
 内核独享
L3 Cache
 所有内核共享

缓存读取时间

Registers(寄存器组)   `<1ns`
L1 cache (一级缓存)   `约1ns`
L2 cache(二级缓存)  `约3ns`
L3cache(三级缓存)   `约15ns`
主内存(最终存储地址) `约80ns`

缓存行Cache Line概念

1. 缓存是由最小的存储区块缓存行Cache Line组成

2. 计算机当中为了让效率更高,在读取数据时,是一块一块进行读取的

3. cache Line能够读取的大小是64个字节

image-acb999cd38884866a58d805bb9780d3d.png

cpu缓存一致性问题

假设cpu1从主内存当中读取一个共享数据i = 1,读取到cache当中 进行数据的修改,把i修改为2

image-7506ee0aef2e458987efcfdaa51512a8.png

一、同时同一个cpu也从内存当中读取数据

  1. 此时读取的结构可能是1也可能是2
  2. 如果cpu1把写的结果写到到内存中, cpu2读取的就是2
  3. 如果cpu1没有把结果写回到主内存当中,cpu2读取的就是1

cpu缓存一致性解决方案

1.总线加锁

cpu1在读取的时候不允许其它cpu进行读取
 弊端: 降低了cpu的吞吐量

2.缓存上的一致性协议MESI

后续再说MESI先有个印象

程序的局部性原理

问题

构建数组

image-92a962030ac04dc28a13f8324a01faed.png

创建一个大的二维数组

image-369cb435868d402b8643357a192a4973.png

任务:两种方式所有元素进行求和

请自行根据图片将代码执行查看效果

image-35007e0902c54f25814077770d7b4ae9.png

image-96cf2b153def48acb0bf1df98b8df0a0.png

image-beb85e7801b84f9a908fc49ba7480a13.png

思考问题

为什么会产生这么多时间呢? 如何进行读取的呢?

分析原理

上面一种连续按行读取

image-a2e7c1bfd7d54868b0fa6e7995200292.png

下面一种是按列读取

image-93f026caf277448d94de76ec620d4963.png

经过上面的问题牵扯出一个叫局部性原理的问题

一、什么是局部性原理

  1. 在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理
  2. 当读到某一个数据的时候,可能很快就会用到和它相邻的值,此时就会把它相邻的值也一起读取,来提高程序的效率
  3. 局部性原理有些像概率问题,被使用过的数据:在时间上,大概率会被多次使用;在空间上,其附近的位置“大概率”也会被引用

空间局部性

如果一个存储器的位置被引用,那么将来他附近的位置也会被引用

时间局部性

被引用过一次的存储器位置在未来会被多次引用那么在近期它很可能还会被再次访问
相关文章
|
3月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
830 0
|
5月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
162 0
|
2月前
|
缓存 关系型数据库 MySQL
降低MySQL高CPU使用率的优化策略。
通过上述方法不断地迭代改进,在实际操作中需要根据具体场景做出相对合理判断。每一步改进都需谨慎评估其变动可能导致其他方面问题,在做任何变动前建议先在测试环境验证其效果后再部署到生产环境中去。
97 6
|
2月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
3月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
230 0
|
4月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
9月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
916 166
|
5月前
|
缓存 搜索推荐 CDN
HTTP缓存策略的区别和解决的问题
总的来说,HTTP缓存策略是一种权衡,需要根据具体的应用场景和需求来选择合适的策略。理解和掌握这些策略,可以帮助我们更好地优化网页性能,提高用户的浏览体验。
129 11
|
4月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
161 0