2

我是 Spring Reactive 编程和 Spring Async 方法的新手。我有个疑问。通过使用 spring webflux,我们可以进行反应式编程,这样我们就可以执行一段特定的代码,而我们当前的线程不需要等待它完成执行。同样,通过使用@async 方法,我们可以使特定的代码在不同的线程中运行,这样我们当前的线程就不会等待。

那么在这些情况下,webflux 和 async 方法有何不同以及何时使用哪个?

4

2 回答 2

1

它们是粉笔和奶酪——它们的不同之处足以让它们无法真正直接进行比较。

注释只是在一个单独的线程中执行被注释的@Async方法,并且在返回之前不会阻塞该线程(不等待它完成。)异步的正常用例是触发后忘记(或触发 - and-read-later) 场景,用于在传统阻塞环境中长时间运行的任务。

另一方面,Webflux 完全摒弃了传统的阻塞线程模型,而是通过一个由少数线程组成的事件循环来服务每个请求,这些线程永远不会阻塞。要做到这一点,需要一种与传统阻塞应用程序完全不同的代码编写方式。它不仅用于即发即弃的场景,它还成为您处理进入应用程序的每个请求的默认方式。

于 2020-05-23T23:33:18.337 回答
1

你的问题几乎提到了你所说的区别in a different thread

混淆的原因: Webfux 和 @Async 都从它们被调用的线程异步运行。

现在让我们进一步深入研究..

Weblux,它异步运行,但不是因为产生了新线程。

它是围绕发布者-订阅者模式(观察者模式)构建的,它提供了异步特性。

于 2020-05-25T14:06:06.003 回答