在当前多线程编程遭受Node.js等单线程事件驱动的挑战下,多线程如何加强线程之间通信速度,而且要以最小的代码实施,成为最大问题。
我个人观点,该文虽然以火车与火车站来比喻,实际是Disruptor的多个Ringbuffer组合,多列火车实际是多个Ringbuffer。
Disruptor的作者使用Disruptor实现多生产者和消费者案例如下:
点击翻墙看英文
他说:如果你知道你有生产商的数目在初始化时,你可以建立一个结构,显著减少争用。Disruptor中现有MultiProducerSequencer没有这个约束。
相比Disruptor以前使用MultiProducerSequencer为多个生产者只用一个Disruptor,现在可以使用SingleProducerSequencer 为每个生产者创建一个disruptor,下面就是在消费者里面的处理,增加了一个MultiBufferBatchEventProcesor
三个生产者一个消费者的代码:ThreeToThreeSequencedThroughputTes
测试结果:
Run 0, Disruptor=390,738,060 ops/sec
Run 1, Disruptor=387,931,034 ops/sec
Run 2, Disruptor=397,058,823 ops/sec
Run 3, Disruptor=394,160,583 ops/sec
Run 4, Disruptor=396,767,083 ops/sec
Run 5, Disruptor=394,736,842 ops/sec
Run 6, Disruptor=396,767,083 ops/sec
而Railway测试结果:
ops/sec = 243,141,801
ops/sec = 302,695,445
ops/sec = 283,096,862
ops/sec = 273,670,298
ops/sec = 268,340,387
ops/sec = 264,802,500
ops/sec = 262,258,028
disruptor比railway吞吐量提高了。
这个新功能将发布在下一个disruptor版本中。