Как реализовать RingFiFoBuffer - PullRequest
0 голосов
/ 12 февраля 2012

Я новичок в программировании на Java.У меня есть несколько вопросов о том, как реализовать RingFiFoBuffer:

  1. Можно ли хранить большие XML-файлы в этом буфере?Если да, насколько большой?
  2. Могут ли несколько потоков одновременно вставлять / удалять / извлекать записи из RingBuffer?
  3. Сколько записей я могу хранить?
  4. Есть ли какой-нибудь учебник, который я могуМожно посмотреть, как написать код.

Я только нашел http://commons.apache.org/collections/apidocs/org/apache/commons/collections/buffer/CircularFifoBuffer.html

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Могу ли я хранить большие XML-файлы в этом буфере? Если да, то насколько большой?

Вы ограничены только дисковым пространством с файлами сопоставленной памяти.

Может ли несколько потоков одновременно вставлять / удалять / извлекать записи из RingBuffer?

Это зависит от вашей реализации. Обычно кольцевые буферы распределяются между потоками.

Сколько записей я могу хранить?

Это то, что вы обычно ограничиваете при создании кольцевого буфера, так что решать вам. Обычно разумно сводить их к минимуму, так как большие кольцевые буферы часто могут быть медленнее, чем более жесткие кольцевые буферы. Поэтому практический предел может зависеть от вашего приложения и используемого оборудования.

Есть ли какое-нибудь учебное пособие, в котором я вижу, как написать код.

Лучший пример, который я знаю, - это библиотека Disruptor. Он довольно продвинутый, но имеет лучшую документацию, чем я могу себе представить. (Включая библиотеки, которые я написал;)

http://code.google.com/p/disruptor/

1 голос
/ 12 февраля 2012

Вопросы 1 и 3: Это ограничено только объемом памяти, который вы назначаете процессу Java, выполняющему вашу программу.

Вопрос 2: Для доступа к коллекции, подобной тому, на который ссылается CircularFifoBuffer, обычно требуется «синхронизировать» их.Связанный JavaDoc уже содержит код для его синхронизации:

Buffer fifo = BufferUtils.synchronizedBuffer(new CircularFifoBuffer());
...