Java: использовать Disruptor или нет., - PullRequest
3 голосов
/ 19 декабря 2011

Hy,

В настоящее время я занимаюсь разработкой программы, которая берет 2 значения из очереди amq и выполняет серию математических вычислений над ними.На сервере amq была создана тема, на которую моя программа подписывается и получает сообщения через обратные вызовы (слушатели).

Теперь, когда приходит сообщение, два значения извлекаются и добавляются в объект SynchronizedDescriptiveStatistics.После каждого добавления в список значений вся последовательность вычислений выполняется заново (на самом деле это часть требования).

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, поскольку я использую слушатели, иногдаодно или несколько сообщений получаются в середине вычислений.Хотя SynchronizedDescriptiveStatistics самостоятельно решает все проблемы, связанные с потоками, но он добавляет все ожидающие значения в свой список номеров сразу, когда он выходит из-под контроля или что-то в этом роде.Хотя моя проблема заключалась в том, чтобы добавить одно значение, затем выполнить вычисления для него, затем второе значение и так далее.

Решение, которое я придумал, заключается в использовании очередей заданий в моей программе (не в очереди amq).Таким образом, всякий раз, когда вызовы завершены, программа будет искать дальнейшие задания в очереди и будет продолжать работать соответственно.

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

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

Ожидание ответа.,.

С уважением.

1 Ответ

13 голосов
/ 20 декабря 2011

Я дам наш типичный ответ на этот вопрос: сначала протестируйте и примите решение на основе ваших результатов.

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

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

Сначала оцените, и решите на основе ваших результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...