Java: использовать Disruptor или нет. .

Hy,

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

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

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

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

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

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

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

С Уважением.


person h.i    schedule 19.12.2011    source источник


Ответы (1)


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

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

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

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

person Trisha    schedule 20.12.2011