disruptor基本使用与实战

本文通过分析jdon框架中的async部分代码,详细介绍了Disruptor的实现原理与应用。重点探讨了RingBuffer作为核心存储结构的作用,以及Sequencer如何协调生产者与消费者的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天又忙里偷闲,看了下jdon框架,忍不住clone了代码,细细看了下aysnc部分的代码,主要是对disruptor的一个实践,和手中一个公司的项目部分代码很相似,看来得去看看disruptor官方提供的Test部分代码了,提供了样本吧,且不计较,大家也可以去看看。

 

 

 

 

看看这里的编码方式,看起来比较舒服。

 

这里引用别的同学的一段总结

 

 RingBuffer当然是我们的核心存储结构啦,创建一个RingBuffer的时候需要提供一个Sequencer对象,Sequencer是用来协调生产者和消费者对于RingBuffer的使用的,具体包括:保证生产者发布到RingBuffer中的消息是严格递增顺序的,保证生产者不覆盖未被消费的消息。Sequencer的实现并不复杂,其实就是追踪表示各个消费者消费状态的Sequence对象与自身的cursor(Sequence)之间的关系。

对于一个生产者来说,主要是使用的是Sequencer的next()和publish()方法,next方法是申请空间,publish是发布消息,申请和发布都包括单条和批量两种类型。
下面来看消费者,在disruptor中,消费者就是一个EventProcessor, 其中主要包含两个成员,一个是SequenceBarrier, 一个是EventHandler。SequenceBarrier则用来表示该消费者对生产者和其它消费者的依赖关系,例如如果消费者1的消费数据必须要被消费者2处理过才可以,那么需要将表示消费者1的sequence加入到消费者2的sequenceBarrier中。。EventHandler的意义很明显,就是消息事件的处理函数。从EventHandler我们也可以看出EventProcessor是一个actor角色

 

 

 

 

https://github.com/runc    后面找个时间把代码放上去,目前还空空如也!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值