2

@Async注解的方法和Reactor设置使用相同大小的线程池有什么区别。这种方法之一有什么好处,它会是什么?对于我的使用,我不关心使用异步方法返回任何值。

4

1 回答 1

4

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

话虽如此,Reactor 中通过DynamicReactorFactory@Async对-style 事件发布提供了一些支持。它使用接口而不是注解,但概念相似。

关于使用其中一个或另一个的“优势”:这实际上取决于您在应用程序中所做的其他事情以及您是否在更一般的意义上使用 Reactor。Reactor 并非旨在替代线程池。ThreadPoolExecutorDispatcherin Reactor 只是在下面使用一个平原ThreadPoolExecutor。在这种情况下使用 Reactor 的优势来自于 Reactor 中使用的优化事件发布,而不是始终创建新CallablesRunnables,以及使用 ReactorStreamPromiseAPI 来处理异步执行。

从 API 的角度来看,与普通TaskExecutor的后台作业相比,使用 Reactor 具有明显且可衡量的优势。

于 2013-11-01T19:02:08.453 回答