Spring中的@Async与Reactor线程池

时间:2013-11-01 16:01:20

标签: multithreading spring spring-annotations reactor

@Async带注释的方法和设置为使用相同大小的线程池的Reactor之间的区别是什么。这种方法之一有什么优势,它会是什么?对于我的使用,我不关心使用asynced方法返回任何值。

1 个答案:

答案 0 :(得分:3)

最明显的区别是Reactor没有横切@Async注释方法并隐式地将事件提交给Reactor。如果您在bean上使用Reactor @Selector注释,那么您将得到与@Async相反的结果:事件处理程序,而不是事件出版商

话虽如此,Reactor支持通过DynamicReactorFactory发布@Async式活动。它使用接口而不是注释,但概念类似。

关于使用其中一个的“优点”:它实际上取决于您在应用程序中执行的其他操作以及您是否在更广泛的意义上使用Reactor。 Reactor不是为线程池替换而设计的。 Reactor中的ThreadPoolExecutorDispatcher只使用下面的普通ThreadPoolExecutor。在该场景中使用Reactor的优势来自Reactor中使用的优化事件发布,而不是始终创建新的CallablesRunnables,以及使用Reactor的Stream和{{1}用于处理异步执行的API。

从API的角度来看,使用Reactor而不是普通的Promise进行后台工作有一个明显且可衡量的优势。