Java----(一)JUC并发基础

并发:多个线程操作相同的资源,保证线程安全,合理使用资源。

高并发:服务能同时处理很多请求,提高程序性能。

CPU多级缓存

为什么需要多级缓存?

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

CPU cache有什么意义?

1.时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问。
2.空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问。
缓存的容量远远小于主存。

CPU多级缓存—缓存一致性协议(MESI)

用于保证多个CPU cache之间缓存共享数据的一致性,
定义Cache line(缓存行)的四种状态,CPU对cache的四种操作,可能会产生不一致的状态,因此缓存控制器监听到本地操作和远程操作的时候,需要对地址一定的Cache line状态做出修改,从而保证数据在多个缓存之间数据的一致性。
MESI实际是四个状态的缩写:M:modify被修改,E:exclusive独享,S:shared共享,I:invalid无效的。
M:该缓存行只被缓存在该CPU的缓存中,并且是被修改过的,因此它与主存中的数据是不一致的。该缓存行的内存需要在未来某个时间点写回主存。这个时间点我们是允许其他CPU读取主存中相应的内存之前,当这里面的值被写会主存之后,该缓存行的状态会变成E的状态,即独享状态。
E:缓存行只被缓存在该CPU的缓存中,它是未被修改过的,是与主存中的内容一致的,这个状态可以在任何时刻,当有其他CPU读取内存时,变成共享状态,即M。该CPU修改该缓存行的内容时也会变成modify的状态。
S:共享状态意味着,该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存一致,当有一个CPU修改该缓存行的内容时,其他CPU中该缓存行的内容是可以被作废的,即变为Invalid状态。
I:无效即代表该缓存行是无效的,可能是由于其他CPU修改了该缓存行。

四种操作:

local read:读本地缓存中的数据
local write:将数据写到本地的缓存中
remote read:将主存中的数据读取过来
remote write:将数据写回到主存中
在多核系统中,每一个核都有自己的缓存来共享主存总线,每个相应的CPU会发出读写请求,缓存的目的就是减少CPU读写共享主存的次数,一个缓存除了在Invali的状态之外,都可以满足CPU的读请求,写请求,只有在该缓存在M状态或者E状态是才能够被执行,如果缓存行处于S状态是,只有变为I状态。这种操作通常在于广播的时候来完成。既不允许不同的CPU修改同一个缓存行。
只有M和E状态时,该数据是准确的。

Guess you like

Origin blog.csdn.net/cz_chen_zhuo/article/details/111660979
Recommended