近期在看操作系统相关资料的时候,阅读到“信号量与PV操作”,主要分三块:互斥控制,同步控制,生产者与消费者问题。因为我日常与服务器及消息队列打交道较多,对生产者与消费者问题比较感兴趣,正好之前曾经研究过“Disruptor无锁队列”的实现原理,正好再结合PV操作重新回顾下:
注:PV操作中P为荷兰文passeren的缩写,意思是通过。V为荷兰文vrijgeven的缩写,意思是释放。
首先解释下Disruptor到底是什么。Disruptor是提供了一种线程之间数据高速交换方式,其首先用在LMAX架构中,LMAX是金融交易所平台,消息吞吐量十分巨大。可以充分证明这种消息队列实现的高效和稳定。
Disruptor是如何解决问题的呢?Disruptor根本不用锁,取而代之是确保操作线程是安全的。还是上面的例子,不再需要老师去裁判玩具归属,一个孩子玩的时候可用用一种机制保证其他孩子肯定不会抢这个玩具。
CAS操作的资源会比锁资源少多了,显而易见,不需要再通过锁方式,控制多个线程访问。类比孩子玩具的例子,不再需要老师的参与了,玩玩具的孩子也不用停下来解释。
Disruptor实现现已经开源(Apache-2.0 license),可以git clone https://github.com/LMAX-Exchange/disruptor。具体源码实现,篇幅有限,打算后面专门做一个系列来分析学习。

本文介绍Disruptor无锁队列的工作原理及其在LMAX架构中的应用。Disruptor采用CAS操作而非传统的锁机制,实现了生产者与消费者的高效数据交换。基于RingBuffer的实现,使得消息队列性能大幅提升。
2107

被折叠的 条评论
为什么被折叠?



