【JMM内存模型-4】JMM内存模型之CPU缓存策略-jmmcpu4
title: 【JMM内存模型-4】JMM内存模型之CPU缓存策略
date: 2021-11-17 13:27:48.139
updated: 2021-12-26 17:43:10.442
url: https://www.yby6.com/archives/jmmcpu4
categories:
- 并发编程-JMM内存模型
tags:
- 并发编程
CPU缓存策略原理
缓存概述
CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构
cpu缓存策略图

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

三级缓存
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个字节

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

一、同时同一个cpu也从内存当中读取数据
- 此时读取的结构可能是1也可能是2
- 如果cpu1把写的结果写到到内存中, cpu2读取的就是2
- 如果cpu1没有把结果写回到主内存当中,cpu2读取的就是1
cpu缓存一致性解决方案
1.总线加锁
cpu1在读取的时候不允许其它cpu进行读取
弊端: 降低了cpu的吞吐量
2.缓存上的一致性协议MESI
后续再说MESI先有个印象
程序的局部性原理
问题
构建数组

创建一个大的二维数组

任务:两种方式所有元素进行求和
请自行根据图片将代码执行查看效果



思考问题
为什么会产生这么多时间呢? 如何进行读取的呢?
分析原理
上面一种连续按行读取

下面一种是按列读取

经过上面的问题牵扯出一个叫局部性原理的问题
一、什么是局部性原理
- 在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理
- 当读到某一个数据的时候,可能很快就会用到和它相邻的值,此时就会把它相邻的值也一起读取,来提高程序的效率
- 局部性原理有些像概率问题,被使用过的数据:在时间上,大概率会被多次使用;在空间上,其附近的位置“大概率”也会被引用
空间局部性
如果一个存储器的位置被引用,那么将来他附近的位置也会被引用
时间局部性
被引用过一次的存储器位置在未来会被多次引用那么在近期它很可能还会被再次访问
【JMM内存模型-4】JMM内存模型之CPU缓存策略-jmmcpu4的更多相关文章
- java多线程的基础-java内存模型(JMM)
在并发编程中,需要处理两个关键问题:线程之间如何通信,以及线程之间如何同步.通信是指线程之间如何交换信息,在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递. 同步是指程序中用于控 ...
- 关Java的内存模型(JMM)
JMM的关键技术点都是围绕着多线程的原子性.可见性和有序性来建立的 一.原子性(Atomicity) 原子性是指一个操作是不可中断的.即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程 ...
- Java内存模型(JMM)以及 垃圾回收机制 小结
内存模型: 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,这点没有错,但是编译 ...
- java内存模型(jMM)(一)
在说java的内存模型之前先简单的了解计算机的主存和缓存的相关概念. 多任务和高并发是衡量一台计算机处理器的重要指标.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions P ...
- Java线程之Java内存模型(jmm)
一.Java内存模型(jmm) 线程通信 消息传递 重排序 顺序一致性 Happens-Before As-If-Serial
- Java内存区域(运行时数据区域)和内存模型(JMM)
Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分. 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之 ...
- Java 并发系列之三:java 内存模型(JMM)
1. 并发编程的挑战 2. 并发编程需要解决的两大问题 3. 线程通信机制 4. 内存模型 5. volatile 6. synchronized 7. CAS 8. 锁的内存语义 9. DCL 双重 ...
- Java内存模型(JMM)
JVM与线程(线程在JVM中) 1.JVM什么时候启动? 类被调用时启动,此时会启动JVM线程然后再是其他的线程(main) 2.JVM内存区域 除了程序计数器(PC)之外都有可能发生 ...
- Java内存模型(JMM)那些事
本文是库存文章,去年年底学习了慕课网的并发编程课程,今年年初看完了<深入理解Java虚拟机>这本书,但是很多内容忘得差不多了,打算写写博客回忆一下那些忘在脑后的知识点. 温故而知新 更多J ...
- 何为内存模型(JMM)?
前言 任何一门语言都有其语言规范,从逻辑上我们可划分为语法规范和语义规范,语法规范则是描述了如何通过相关语法编写可执行的程序,而语义规范则是指通过语法编写的程序所构造出的具体含义.语言只要具备存储(比 ...
随机推荐
- PYQT5学习(12)Qtabwidget 选项卡及其窗口,Qstackedwidget和Qtabwidget的效果类似,以及系统托盘QsystemtrayIcon
参考博文:https://blog.csdn.net/jia666666/article/details/81669092QTabWidget控件提供一个选项卡和一个页面区域,默认显示第一个选项卡的页 ...
- vue3探索——pinia高阶使用
以下是一些 Pinia 的其他高阶功能: storeToRefs():响应式解构仓库,保证解构出来的数据是响应式的数据. 状态持久化:Pinia 并没有内置的状态持久化功能,但你可以使用第三方库或自定 ...
- TCP vs UDP:揭秘可靠性与效率之争
概述 今天我们开始主要讲解TCP的相关知识点.在之前讲解分层章节的时候,我们提到过一个重要观点.在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它. ...
- 9.2 运用API实现线程同步
Windows 线程同步是指多个线程一同访问共享资源时,为了避免资源的并发访问导致数据的不一致或程序崩溃等问题,需要对线程的访问进行协同和控制,以保证程序的正确性和稳定性.Windows提供了多种线程 ...
- MySQL系列之MHA高可用——主从复制架构演变介绍、高可用MHA、管理员在高可用架构维护的职责
文章目录 1. 主从复制架构演变介绍 1.1 基本结构 1.2 高级应用架构演变 1.2.1 高性能架构 1.2.2 高可用架构 2. 高可用MHA ***** 2.1 架构工作原理 2.2 架构介绍 ...
- JDK对于Java的作用
JDK是Java Development Kit的缩写,是Java的开发工具包(SDK).JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简 ...
- IDEA工具第二篇:自定义Java方法注释模板
网上搜索类似的文章有很多,但是一味的复制粘贴总会出现各种奇葩问题,最后然并卵!今天特意自己研究琢磨一下,将最终结果分享给大家,100%亲测可用. 一.说明 想必大家都用过Eclipse的方法注释生成, ...
- Hall定理(霍尔定理)证明及推广
引言 网络上有许多Hall定理的证明,但是对于Hall定理的几个推广的介绍却少之又少,因此本文来简单介绍一下 注:为了使这篇文章看起来简单易懂,本文将不会使用图论语言,会图论的朋友们可以自行翻译为图论 ...
- 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻译为PCL语言的步骤
前面这些都是问题描述,问题在偏下面 场景:用户电脑上安装了PCL驱动,可通过驱动完成打印. 需求:现在需要提供一种脱离PC端完成文件上传并打印的功能.让用户使用手机或pc未安装驱动时都能打印文件. 目 ...
- Unity3D ConfigMan.cs For XML File
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...