Spring Web MVC 与 Spring WebFlux。阻塞和非阻塞

Spring Web MVC vs Spring WebFlux. Blocking and Non-blocking

我是 Spring 的新人,我正在读一本书“Pro Spring boot 2”。它在这里说 Spring Web MVC 对每个请求都有一些阻塞,而 Spring Webflux 是一个完全非阻塞的堆栈。

  1. 请告诉我,这是什么意思?
  2. 到达Spring的请求MVC激活一个线程来执行这个请求。何时以及为何被阻止?
  3. 为什么 Spring WebFlux 不阻塞线程?
  1. Spring Web MVC 使用单个线程来处理对 API 的每个请求。 SpringWebflux 不会阻塞线程来处理每个请求,因为没有线程会一直等待完成某些事情(例如,等待数据库的答复)。
  2. 如 1. 中所写,它可以在等待来自数据库或来自通过 HTTP 调用的其他服务的应答时被阻止。
  3. Spring Webflux 利用反应堆栈(查看 https://projectreactor.io/) which is fully non-blocking. This means that no thread is blocked waiting for something to happen. Everything is based on reactive streams publishers (Mono and Flux)使您的代码对可用数据做出反应(例如来自数据库或通过 HTTP 调用的其他服务) .