복붙노트

[SPRING] 스프링 MVC (async) 대 스프링 WebFlux

SPRING

스프링 MVC (async) 대 스프링 WebFlux

Spring WebFlux를 이해하려고합니다. 지금까지 발견 한 것들은 코어, 서블릿 API, 요청 당 스레드, HTTP 2, 서버 푸시, application / stream + json에서 반응이 없습니다.

하지만 Spring MVC에서 비동기 호출의 차이점은 무엇입니까? 제 말은 Spring MVC에서 Future, DefferedResult 등을 반환 할 때 요청 처리기 (컨트롤러 메서드)에서 별도의 스레드에서 실행되는 논리를 얻음으로써 요청을 디스패치하기위한 스레드 풀 리소스를 절약 할 수 있다는 것입니다.

그러니 그 차이점을 강조해 주시겠습니까? 왜 WebFlux가 더 나은가?

대단히 감사합니다!

해결법

  1. ==============================

    1.서블릿 비동기 모델은 컨테이너 스레드 (1 서블릿 요청 / 스레드 모델)와 응용 프로그램에서 요청 처리 사이에 비동기 경계를 도입합니다. 처리는 다른 스레드에서 발생하거나 대기 할 수 있습니다. 결국 컨테이너 스레드로 다시 디스패치하고 차단 방식으로 읽기 / 쓰기해야합니다 (InputStream 및 OutputStream은 본질적으로 API를 차단합니다).

    서블릿 비동기 모델은 컨테이너 스레드 (1 서블릿 요청 / 스레드 모델)와 응용 프로그램에서 요청 처리 사이에 비동기 경계를 도입합니다. 처리는 다른 스레드에서 발생하거나 대기 할 수 있습니다. 결국 컨테이너 스레드로 다시 디스패치하고 차단 방식으로 읽기 / 쓰기해야합니다 (InputStream 및 OutputStream은 본질적으로 API를 차단합니다).

    이 모델에서는 동시성을 얻기 위해 많은 스레드가 필요합니다 (그 중 많은 스레드가 I / O 대기를 막을 수 있기 때문에). 이는 리소스 비용이며 사용 사례에 따라 적절하지 않을 수 있습니다.

    비 블로킹 코드를 사용하면 많은 요청을 동시에 처리하기 위해 몇 개의 스레드 만 있으면됩니다. 이것은 다른 동시성 모델입니다. 어떤 모델과 마찬가지로 이점과 상충 관계가 있습니다.

    이 비교에 대한 자세한 내용은이 서블릿 대 리 액티브 스택 토론이 중요해야합니다.

  2. from https://stackoverflow.com/questions/46606246/spring-mvc-async-vs-spring-webflux by cc-by-sa and MIT license