关于DISRUPTOR中的ringBuffer的理解

12-03-21 lovejdon
大体看了下disruptor的东西,对于伪共享问题的理解:

CPU和内存之间存在一个告诉缓存,来缩短处理速度上的差异,多核CPU每个都有自己的一个高速缓存,里面的东西不会被外界访问到,缓存行的数据应该是内存中数据的组合,因为一个缓存行基本是64字节,比内存数据单元要大,主要是出于速度的考虑。那么就导致了能许多内存的数据会在同一个缓存行中,这样就导致多个CPU去访问同一个缓存行,带来的代价就是需要开启协调机制去处理他们的访问,类似于锁,这样就会大大降低效率。实际上也不是真正的共享数据了。

而DISRUPTOR中的sequence实际就是ringbuffer的下标,是相当于一个64字节的东西,这样可以保证每个CPU都可以获得唯一的一个下标,自然从Buffer中取到的内容也是唯一的,这样就不会出现多个CPU从buffer中取到相同数据的情况,是利用了CPU级别的特性来去掉了锁。不知道这样理解是否正确。

又看了一下BANQ的文章和相关资料以及ringbuffer的源码,个人认为单个CPU也是通过获取下标sequence的value为长整形64字节,所以多核CPU不可能获得同一个SEQUENCE这样就相当于是独享,不会开启CPU之间的资源协调机制,保证了SEQUENCE的独享。

我最近想好好研究下这个框架,希望从中获取更多得精华。希望各位道友鼎力帮助下,多谢!!

[该贴被lovejdon于2012-03-21 18:03修改过]

[该贴被lovejdon于2012-03-22 08:32修改过]

[该贴被lovejdon于2012-03-22 08:33修改过]

1
lshoo
2012-08-31 16:25
我也在研究,但不知道Disruptor的应用场景都有哪些?现实程序,不知道应用在哪一块?

猜你喜欢