作者回复: 我回头重新看了一下代码,我觉得你说的是对的,Padding对应的是RingBufferFields里面的字段,而不应该是INITIAL_CURSOR_VALUE,我去订正一下。
作者回复: 没错,看来你读的时候很仔细地思考过。
当我们的对于数据修改,修改了cache之后,这个数据如果要同步到主内存,那么就会需要通过MSEI协议来在各个CPU Core的Cache里面保持数据同步。
那么是否需要同步主内存,会引发另外一个知识点,就是Memory Barrier/Fence,这部分知识点其实还可以单独拿来说两讲。你可以先去搜索上面的关键词,了解一下。
作者回复: 提点谈不上,对于芯片和硬件我连从业者都还算不上。
不过过去几年的繁荣主要是来自于Intel CPU的极限性能提升已经到头了。所以反而大家回头去找其他的解决方案,在体系结构层面又有了很多新的机会。
我觉得大家都可以去读一读 David Patterson 老爷爷的 <计算机体系结构新黄金时代:历史、挑战和机遇> 这个访谈
https://www.bilibili.com/video/av46710093/
作者回复: 👍
作者回复: 谢谢支持。Disruptor在2011年开源的时候其实是让很多Java开发同学们感到惊艳的,是很值得仔细研读的一份代码
作者回复: 是的,篇幅有限,所以没有太具体解释False Sharing和Memory Fence,欢迎大家留言分析这两部分知识点。
作者回复: -_-_aaa 同学,
你好,indexMask是一个第一次写入之后就不变动的变量了。你可以看到在代码里面这是一个Java的final变量。
前后7个就是因为8个long正好64byte,这样cache line无论在哪个位置被加载,这64个byte在第一次加载到cache line之后就不再需要更新了。
作者回复: -_-_aaa同学,
你好,64位是内存寻址空间,通常也是数据通路的字长(word size)
这个和缓存行之间没有对应关系。
我们也可以把缓存行设计成 16个word,也就是128 Bytes,但是并不会叫他128位计算机。
作者回复: 谢谢支持