# 《高性能Polaris网关》通用处理器-第08节:MPMC模式缓冲队列自定义AtomicLong的设计和实现
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本节重点:对MPMC模式缓冲队列自定义AtomicLong进行设计与实现,结合Java并发编程中的AtomicLong深入理解Polaris网关MPMC模式队列的AtomicLong设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
在网关的整体架构设计中,在基于MPMC实现缓冲队列时,为了更好的提升网关的性能,我们对缓存行进行了自定义处理,为此,专门设计了自定义的AtomicLong类。
有关缓存行相关的知识,大家可以阅读冰河出版的《深入理解高并发编程:核心原理与案例实战 (opens new window)》和《深入理解高并发编程:JDK核心技术 (opens new window)》。
# 一、背景
在网关的整个架构设计中,我们引入了处理器,由处理器来驱动过滤器链的执行,也对网关处理器的顶层接口和核心实现类进行了设计和实现。同时,基于disruptor和Holder模式对BatchEvent模式的缓冲队列进行了设计和实现。但对于一个可以实际投入使用的网关来说,只是实现了BatchEvent模式的缓冲队列是远远不够的。所以,我们着手设计和实现MPMC模式的缓冲队列。
在设计和实现MPMC缓冲队列的过程中,已经对MPMC模式缓冲队列的Condition接口和ThreadWait类进行了设计和实现,并且对抽象Condition类和抽象自旋与等待Condition类进行了设计和实现。为了更好的提升网关的性能,接下来,我们结合网关对自定义AtomicLong进行设计实现。
# 二、本节重点
对MPMC模式缓冲队列自定义AtomicLong进行设计与实现,结合Java并发编程中的AtomicLong深入理解Polaris网关MPMC模式队列的AtomicLong设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
# 三、核心类设计
自定义AtomicLong类的类图如图8-1所示。

可以看到,自定义AtomicLong类主要由CustomAtomicLong实现。
注意:这里重点给大家展示通用核心处理器,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。
# 四、编码实现
本节,就对MPMC模式缓冲队列自定义AtomicLong类进行编码实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。
CustomAtomicLong类是结合网关特有的性能要求,基于AtomicLongArray实现的自定义AtomicLong类,并且为了进一步提升网关的性能,对缓存行做了相应的处理。
源码详见:polaris-processor-api工程下的io.binghe.polaris.processor.api.concurrent.queue.mpmc.atomic.CustomAtomicLong。
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码