2012-09-25 17 views
3

我们有一个具有固定长度数组的Disruptor实现。是否可以实现不依赖于该数组的模式版本,而是包含(可能是自描述的)可变长度对象列表。例如,Protobuf对象的Ringbuffer?是否可以在不使用固定长度数组的情况下使用Disruptor/Ringbuffer模式?

我知道固定长度数组是用于“预先分配”的步骤,但我认为可以用一个或多个对象池来近似该步骤。

+0

你想达到什么目的?你是否想要一个不断增长的环缓冲区,在重新使用最老的内存(例如事件日志或类似的东西)之前,它只会增长到特定的数量? – Mario

+0

我需要一个更灵活的环缓冲区。我已经继承了一个可以预测的系统,但对延迟要求很少/没有低延迟要求。添加新的参数或测试新的想法对于固定长度阵列的不灵活性是难以置信的。 – endian

+0

也许我错过了某些东西,因为没有使用这个特定的模式,但是什么新的参数?阵列如何“不灵活”? – Mario

回答

1

disruptor的java版本中的环缓冲区是任何对对象的引用数组。你可以通过你创建的EventFactory实例把你想要的任何对象放在那里。

1

确实有可能实现一个没有被Object数组支持的disruptor版本,但它不会是高性能的。 LMAX Exchange Disruptor的设计和实施已经引起了许多思考和机械同情。

实质上,环形缓冲区是一个预先分配的对象池。根据我的经验,我从来不用担心在任何真实世界的代码中直接管理环形缓冲区的资源。破坏者将在必要时自动施加反压。

该库提供了一个很好的DSL来为您的应用程序构建一个依赖关系图,并且基本上为您提供了免费的并行性。

相关问题