美文网首页
高并发基础一

高并发基础一

作者: 宋雨轩同学 | 来源:发表于2019-11-27 00:15 被阅读0次
image.png

最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存和高速缓存都连在系统总线上,这条总线还用于其他组件的通信。
高速缓存出现不久,系统变得越来越复杂,高速缓存与主存之间的速度差异被拉大,直到加入了另一级缓存,新加入的这级缓存比第一缓存更大,而且更慢,而且经济上不合适,所以有了二级缓存,甚至是三级缓存。

一、为什么需要CPU cache?

CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源,所 以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu->cache->memort)

二、CPU cache有什么意义?

1、时间局部性:如果某个数据被访问,那么在不久的将来他很可能被再次访问
2、空间局部性:如果某个数据被访问,那么与他相邻的数据很快也可能被访问

三、缓存一致性(MESI)

CPU中每个缓存行使用四种状态进行标记

M:Modified 修改
指的是该缓存行只被缓存在该CPU缓存中,并且是被修改过的,因此他与主存的数据是不一致的,该缓存行中的数据需要在未来的某个时间点(允许其他CPU读取主存相应的内容之前)写回主存,然后状态变成E(独享)。

E :Exclusive 独享
缓存行只被缓存在该CPU的缓存中,是未被修改过的,与主存的数据是一致的,可以在任何时刻当有其他CPU读取该内存时,变成S(共享)状态,当CPU修改缓存行的内容时,变成M(修改)的状态。

S :Share 共享
意味着该缓存行可能被多个CPU进行缓存,并且该缓存中的数据与主存数据是一致的,当有一个CPU修改该缓存行时,其他CPU是可以被作废的,变成I(无效的)。

I :Invalid 无效的

对应的四个操作

local read:读本地缓存
local write:写本地缓存
remote read:将内存中的数据读取过来
remote write:将数据写回主存

缓存一致性

为了达到数据访问的一致,需要各个处理器在访问缓存时遵循一些协议,在读写时根据协议来操作,常见的协议有MSI,MESI,MOSI等。我们介绍其中最经典的MESI协议。

在MESI协议中,每个cache line有4个状态,可用2个bit表示,它们分别是
状态 描述

M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。
E(Exclusive)    这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
S(Shared)   这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中。
I(Invalid)  这行数据无效
E、状态
image.png

只有Core 0访问变量x,它的Cache line状态为E(Exclusive)

S、状态
image.png

3个Core都访问变量x,它们对应的Cache line为S(Shared)状态

M状态和I状态
image.png

Core 0修改了x的值之后,这个Cache line变成了M(Modified)状态,其他Core对应的Cache line变成了I(Invalid)状态

相关文章

  • 高并发Java

    高并发Java(1):前言 高并发Java(2):多线程基础 高并发Java(3):Java内存模型和线程安全 高...

  • 高并发基础一

    最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存和高速缓存都...

  • 高并发基础(一)

    参考来源: ① http://ifeve.com/高并发编程必备基础/ ② https://www.cnblogs...

  • 高并发基础篇”构建一个高并发通用方法不是一朝一夕的事儿"

    这篇文章主要在讲一些高并发的基础概念,当你了解高并发其中缘由,对你以后开发高并发系统很有帮助,任何东西都是从理念到...

  • 高并发编程基础

    1.AQS的属性(1)本类中的属性 (2)父类中的属性AbstractQueuedSynchronizer类继承了...

  • 高并发编程基础

    1.同步方法锁定的是锁对应的其它同步方法,不影响调用非同步方法或其它锁对应的同步方法。 2.同步方法只能保证当前方...

  • 并发与高并发基础概念

    并发 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时存在的...

  • 架构师必备:阿里最新2020版多线程与高并发pdf

    多线程与高并发是架构中的基础,大家可以尝试回答下面的知识点,来看看你是否能够熟练掌握多线程与高并发 基础概念: 什...

  • 探讨一下!Java并发编程基础篇一

    Java并发编程想必大家都不陌生,它是实现高并发/高流量的基础,今天我们就来一起学习这方面的内容。 什么是线程?什...

  • 高并发基础知识(一)

    Netty之所以这么火,与它的巨大优点是密不可分的,大致可以总结如下: · API使用简单,开发门槛低。· 功能强...

网友评论

      本文标题:高并发基础一

      本文链接:https://www.haomeiwen.com/subject/gpduwctx.html