由于RingBuffer预先分配给定类型的对象,如何使用单个环形缓冲区来处理各种不同类型的消息?
您无法创建要插入ringBuffer的新对象实例,这会破坏预先分配的目的.
因此,您可以在异步消息传递模式中拥有3条消息:
所以我的问题是你是如何将Disruptor模式用于现实世界的消息系统?
谢谢
链接:http: //code.google.com/p/disruptor-net/wiki/CodeExamples
有人可以建议好的CircularBuffer实现吗?我需要"非线程安全"和"线程安全"版本.我希望以下操作:
我希望在速度和使用内存,平均和最差时间等方面高度优化实现.
我希望"非线程安全"实现非常快.我希望"线程安全"实现很快,可能使用"无锁代码"进行同步,如果速度需要,可以有一些限制.
如果缓冲区太小而无法存储新的(添加的)元素,则可以静默覆盖现有元素或引发异常.
我应该使用disruptor.net吗?
添加链接到一个很好的示例Disruptor.NET示例
在这个例子中/sf/answers/698624251/和这里为什么我的破坏者示例如此之慢?(在问题的最后)有1个发布者发布项目和1个消费者.
但就我而言,消费者工作要复杂得多,需要一些时间.所以我想要4个并行处理数据的消费者.
因此,例如,如果生产者产生数字:1,2,3,4,5,6,7,8,9,10,11 ..
我希望consumer1能够捕获1,5,9,... consumer2捕获2,6,10,... consumer3捕获3,7,11,... consumer4捕获4,8,12 ......(不完全是这些数字,这个想法是数据应该并行处理,我不关心在哪个消费者处理哪个数字)
并且记住这需要并行完成,因为在实际应用中,消费者工作非常昂贵.我希望消费者能够在不同的线程中执行以使用多核系统的功能.
当然我可以创建4个环形缓冲区并将1个消费者连接到1个环形缓冲区.这样我可以使用原始示例.但我觉得这不对.可能创建1个发布者(1个铃声缓冲器)和4个消费者是正确的 - 因为这是我需要的.
添加指向Google群组中非常类似问题的链接:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
所以我们有两个选择: