在这个例子中https://stackoverflow.com/a/9980346/93647和这里为什么我的破坏者例子这么慢?(在问题结束时)有 1 个发布者发布项目和 1 个消费者。
但就我而言,消费者工作要复杂得多,需要一些时间。所以我想要 4 个并行处理数据的消费者。
例如,如果生产者生产数字:1,2,3,4,5,6,7,8,9,10,11..
我希望消费者 1 捕获 1,5,9,...消费者 2 捕获 2,6,10,...消费者 3 捕获 3,7,11,...消费者 4 捕获 4,8,12...(不完全是这些数字,想法是数据应该并行处理,我不在乎哪个消费者处理了哪个特定数字)
请记住,这需要并行完成,因为在实际应用程序中,消费者工作非常昂贵。我希望消费者在不同的线程中执行以使用多核系统的强大功能。
当然,我可以只创建 4 个环形缓冲区并将 1 个消费者附加到 1 个环形缓冲区。这样我就可以使用原始示例。但我觉得这不会是正确的。创建 1 个发布者(1 个环形缓冲区)和 4 个消费者可能是正确的——因为这是我需要的。
在谷歌群组中添加一个非常相似的问题的链接:https ://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
所以我们有两个选择:
- 一环多个消费者(每个消费者都会在每次添加时“唤醒”,所有消费者应该有相同的WaitStrategy)
- 许多“一环 - 一个消费者”(每个消费者只会在它应该处理的数据上唤醒。每个消费者可以有自己的 WaitStrategy)。