今天又忙里偷闲,看了下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 后面找个时间把代码放上去,目前还空空如也!