无锁并行框架多生产者多消费者模型

下面看一下多生产多消费者的模式,下面的代码是模拟100个生产者,每个生产者生产100个事件,然后有3个消费者,同时进行消费,共消费1W个事件,

下面看一下代码:

 这边new出了3个消费者,并把消费者数组放入workPool这个消息队列中,然后在RingBuffer中获取事件,进行消费:

看一下event类:Order

下面看一下生产者:

把数据生产完成后,放入ringBuffer,然后进行事件发布

在看一下消费者:

通过一个原子类进行消费的记录查看哪个消费者消费了多少个事件,

查看一下打印的结果:

看一下最后的打印结果:

3个消费者,总共消费1000个事件,中间的协调通过SequenceBarrier进行消费协调;这种实现模式就是多消费者多生产者。需要注意的是RingBuffer和disruptor使用的范围,RingBuffer适合使用在不复杂消费模型上面,disruptor适合使用在复杂消费模型上,例如,菱形,顺序,六边形等。

原文地址:https://www.cnblogs.com/shmilyToHu/p/6543853.html