请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于消除伪共享的疑惑

图片描述看代码在com.lmax.disruptor.Sequence中会在value属性的左和右分别插入七个long,每个long占用七位.
图片描述
图片描述
而在ringbuffer中并没有看到p9, p10, p11, p12, p13, p14, p15.

我有如下问题:

  1. 在sequence类中它的所有父类共有15个long,本身有一个final 的long,本身这个final的long是否也算在value这个属性值所占有的那个缓存行中的一个?
  2. 为什么ringbuffer中并没有见到sequence的p9, p10, p11, p12, p13, p14, p15?

正在回答 回答被采纳积分+3

2回答

阿神 2018-09-13 13:35:17

为什么要在ringbuffer里加缓存呢?

1 回复 有任何疑惑可以回复我~
  • 提问者 zkkorz #1
    不是加缓存,而是ringbuffer消除伪共享时对缓存行的操作和sequence有什么区别
    回复 有任何疑惑可以回复我~ 2018-09-13 13:37:28
  • 阿神 #2
    seq是一个对象,他里面的value才是做出来的呀
    回复 有任何疑惑可以回复我~ 2018-09-13 13:45:57
  • 提问者 zkkorz #3
    老师还有一个问题,如果在64位机器上8个long一个缓存行,里面只有一个有效值(就像sequence父类的value属性一样),可是如果是在128位机器上disruptor是怎么处理的呢
    回复 有任何疑惑可以回复我~ 2018-09-13 20:02:40
阿神 2018-09-13 13:36:06

是的,填充,我们需要并发访问的只有value

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信