我们有一个具有固定长度数组的Disruptor实现。是否可以实现不依赖于此数组的模式版本,而是包含(可能是自描述的)可变长度对象的列表。例如,Protobuf对象的Ringbuffer?
我知道固定长度数组用于“预分配”步骤,但我认为可以用一个或多个对象池来近似该步骤。
答案 0 :(得分:1)
java版本的disruptor中的ringbuffer是对象的任何引用数组。您可以通过您创建的EventFactory实例将所需的任何对象放在那里。
答案 1 :(得分:1)
绝对有可能实现一个不受Object数组支持的破坏程序版本,但它不会具有高性能。 LMAX Exchange Disruptor的设计和实施已经引起了很多思考和机械上的同情。
基本上,环形缓冲区是预先分配的对象池。根据我的经验,我从来不必担心直接在任何现实世界的代码中管理环形缓冲区的资源。破坏者将在必要时自动施加背压。
该库提供了一个很好的DSL来为您的应用程序构建依赖图,并且基本上可以免费提供并行性。