# 《高性能Polaris网关》通用处理器-第10节:MPMC模式缓冲队列核心并发队列接口的设计和实现

作者:冰河
星球: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模式缓冲队列的核心并发队列接口进行设计与实现,结合JDK中的Queue接口理解高性能网关的并发队列设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

在网关的整体架构设计中,在基于MPMC实现缓冲队列时,为了更好的提升网关的性能,我们对缓存行进行了自定义处理,为此,专门设计了自定义的AtomicLong类。同时,为了更好的提升网关MPMC模式队列的性能,我们也对网关的队列容量进行了单独的设计和实现。接下来,就对MPMC模式的缓冲队列核心并发队列接口进行设计和实现。

有JDK中各种队列相关的知识,大家可以阅读冰河出版的《深入理解高并发编程:核心原理与案例实战 (opens new window)》和《深入理解高并发编程:JDK核心技术 (opens new window)》。

# 一、背景

在网关的整个架构设计中,我们引入了处理器,由处理器来驱动过滤器链的执行,也对网关处理器的顶层接口和核心实现类进行了设计和实现。同时,基于disruptor和Holder模式对BatchEvent模式的缓冲队列进行了设计和实现。但对于一个可以实际投入使用的网关来说,只是实现了BatchEvent模式的缓冲队列是远远不够的。所以,我们着手设计和实现MPMC模式的缓冲队列。

在设计和实现MPMC缓冲队列的过程中,已经对MPMC模式缓冲队列的Condition接口和ThreadWait类进行了设计和实现,并且对抽象Condition类和抽象自旋与等待Condition类进行了设计和实现。为了更好的提升网关的性能,我们又结合网关对自定义的AtomicLong进行了设计实现。同时,为了更好的提升网关MPMC模式队列的性能,也对网关的队列容量进行单独的设计和实现。接下来,就对MPMC模式的缓冲队列核心并发队列接口进行设计和实现。

# 二、本节重点

对MPMC模式缓冲队列的核心并发队列接口进行设计与实现,结合JDK中的Queue接口理解高性能网关的并发队列设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

自定义并发队列的类图如图10-1所示。


可以看到,并发队列接口主要由ConcurrentQueue接口实现。

注意:这里重点给大家展示通用核心处理器,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,就对MPMC模式缓冲队列自定义核心并发队列接口进行编码实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

ConcurrentQueue接口是自定义的并发队列接口,定义了常见的队列操作方法。

源码详见:polaris-processor-api工程下的io.binghe.polaris.processor.api.concurrent.queue.mpmc.queue.ConcurrentQueue。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码