一、重排序场景 class ResortDemo { int a = 0; boolean flag = false; public void writer() { a = 1; //1 flag = true; //2 } Public void reader() { if (flag) { // ...
分类:
编程语言 时间:
2019-12-31 12:18:11
阅读次数:
82
1. 缓存一致性协议的由来: 计算机的存储设备速度与cpu的运算速度之间是数量级的差距,现代计算机不得不加入一层读写速度尽可能接近cpu运算速度的高速缓存来作为内存和cpu之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样cpu就无须等待缓慢的 ...
分类:
其他好文 时间:
2019-12-27 10:01:57
阅读次数:
75
一、摘要 三级缓存,MESI缓存一致性协议,指令重排,内存屏障,JMM,volatile。单拿一个出来,想必大家对这些概念应该有一定了解。但是这些东西有什么必然的联系,或者他们之间究竟有什么前世今生想必是困扰大家的一个问题。为什么有了MESI协议,我们还需要volatile?内存屏障的由来?指令重排 ...
分类:
其他好文 时间:
2019-12-24 15:47:11
阅读次数:
105
一、CPU多级缓存 CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源,所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题。CPU多级缓存配置(演变):局部性原理:(1) 时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问。(2 ...
分类:
其他好文 时间:
2019-12-22 18:01:59
阅读次数:
112
原文地址 译者:罗立树 校对:方腾飞 并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK concurrent包下的Future 接口。 我们强烈地建议你在代码中多使用ListenableFut ...
分类:
其他好文 时间:
2019-12-11 11:20:59
阅读次数:
105
起因 在阅读百度的发号器 uid-generator 源码的过程中,发现了一段很奇怪的代码: 这里面有6个看上去毫无作用的volatile long变量(标红)。如果这是我自己写的代码,我肯定会认为是我自己手抖写多了。 但是作为百度的发号器,开源了这么久,如果是手抖早被fix了。肯定还是有深意的。于 ...
分类:
编程语言 时间:
2019-12-07 01:28:43
阅读次数:
128
总线锁、缓存锁、MESI缓存一致性协议、CPU 层面的内存屏障 1.JMM定义: Java Memory Model(java内存模型)是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后 ...
分类:
编程语言 时间:
2019-11-22 00:58:53
阅读次数:
76
SampleRateconverter.java(接近于官方源码) 输入目标采样率,输入文件,输出文件。食用方便;p 比如 SampleRateConverter源码: 笔者在JDK1.8下面测试发现,目标编码还支持PCM_FLOAT(即pcm_f32le) 32位浮点型音频 ...
分类:
其他好文 时间:
2019-11-11 17:00:37
阅读次数:
85
二、CPU多级缓存 2-1 CPU高级缓存-缓存一致性(MESI协议) 1.为什么需要CPU缓存? 答:CPU的频率太快了,快到主存赶不上,这样在处理器时钟周期内,CPU常常要等待主存,浪费了资源。所以缓存的出现,是为了缓解CPU和内存之间速度不匹配的问题。(结构:cpu->cache->memor ...
分类:
其他好文 时间:
2019-10-07 23:47:27
阅读次数:
170
printk(KERN_CRIT"frames[frame_idx].width:%d, frames[frame_idx].height:%d\n",frames[frame_idx].width, frames[frame_idx].height); 但为什么一个printk会造成kernel ...
分类:
其他好文 时间:
2019-09-21 01:16:34
阅读次数:
124