上一篇从log4j2引出了Disruptor,由Log4j2日志框架到Disruptor入门 简单介绍了他的特性,这一篇咱们深入探讨下它的底层原理Ringbuffer。
在剖析RingBuffer之前,有必要简单介绍几个概念:缓存行、伪共享、内存屏障,上一章讨论了锁对程序运行的影响以及Log框架是如果解决锁带来影响,最终引出Disruptor,因为它是一个开源的无锁并发框架,但即便规避了使用锁,在计算底层还是会出现共享资源访问问题,接下来解释下刚才提出的几个概念。
缓存行: CPU加载内存中的数据时并不是指谁就获取谁,多级缓存结构中,CPU会将要处理的数据的相邻数据一并读取到L1级缓存中,他们就是一个缓存行,老机器32k, 目前主流64k,也有128k的,Disputor是对64k缓存CPU做了优化
伪共享:当两个CPU核心读取不同的数据,又恰好在同一个缓存行中,那么就会出现两个CPU加载了同一份数据到L1中&#