2013-11-01 4 views
2

В чем разница между @Async аннотированным методом и Reactor установлена ​​для использования пула потоков того же размера. Есть ли какое-то преимущество для одного из этих методов и что это будет? Для моего использования я не хочу возвращать какую-либо ценность с помощью асинхронного метода.@Async vs. Reactor thread pool весной

ответ

3

Наиболее очевидным отличием является то, что реактор не пересекает @Async аннотированные методы и неявно передает события в Reactor. Если вы используете аннотацию Reactor @Selector на бобах, то вы получаете противоположное тому, что вы бы сделали с @Async: событие обработчик, а не событие издатель.

С учетом сказанного, существует некоторая поддержка в реакторе для публикации событий @Async-стилей через DynamicReactorFactory. Он использует интерфейс вместо аннотации, но концепция аналогична.

Что касается «преимуществ» от использования одного или другого: это действительно зависит от того, что вы делаете в своем приложении и используете ли вы Reactor в более общем смысле. Реактор не предназначен для замены пула потоков. В реакторе ThreadPoolExecutorDispatcher используется просто ThreadPoolExecutor внизу. Преимущества использования Reactor в этом сценарии исходят от оптимизированной публикации событий, используемой в Reactor, и создания новых Callables и Runnables все время, а также использования API Reactor Stream и Promise для обработки асинхронного выполнения.

В соответствии с API, существует очевидное и измеримое преимущество использования Reactor над равным TaskExecutor для фоновых заданий.