programing

Spring MVC(비동기) 대 Spring WebFlux

megabox 2023. 7. 28. 21:54
반응형

Spring MVC(비동기) 대 Spring WebFlux

저는 스프링 웹 플럭스를 이해하려고 노력하고 있습니다.지금까지 제가 찾은 것들은 코어에서 반응적이고, 서블릿 API도 없고, 요청당 스레드도 없고, HTTP 2, 서버 푸시, application/stream+json입니다.

그러나 Spring MVC의 비동기 호출 간의 차이점은 무엇입니까?제 말은 봄 MVC에서 Future, Deferred Result 등을 반환할 때 별도의 스레드에서 실행되는 요청 핸들러(컨트롤러 방식)의 로직을 얻을 수 있으므로 요청을 발송하기 위한 스레드 풀 리소스도 절약할 수 있습니다.

그래서 그것과 관련된 차이점을 강조해 주시겠습니까?WebFlux가 더 나은 이유는 무엇입니까?

시간 내주셔서 정말 감사합니다!

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

이 모델에서는 I/O를 기다리는 동안 많은 스레드가 차단될 수 있기 때문에 동시성을 달성하기 위해 많은 스레드가 필요합니다.이는 리소스를 소모하며 사용 사례에 따라 절충이 될 수 있습니다.

비차단 코드를 사용하면 많은 요청을 동시에 처리하기 위해 몇 개의 스레드만 필요합니다.이것은 다른 동시성 모델입니다. 다른 모델과 마찬가지로 이점과 단점이 있습니다.

이 비교에 대한 자세한 내용은 서블릿과 사후 대응적 스택 이야기는 관심을 끌어야 합니다.

서블릿 API가 HTTP 요청당 1개의 스레드를 필요로 하는 I/O를 차단하고 있습니다.Spring MVC 비동기는 컨테이너 스레드와 요청 처리 스레드 간의 비동기 동작만 제공하고 엔드 투 엔드는 제공하지 않는 Servlet API에 의존합니다.

반면에 Spring WebFlux는 HTTP 소켓을 사용하고 소켓을 통해 한 번에 데이터 청크를 푸시하여 고정된 수의 스레드를 통해 동시성을 달성합니다.이 메커니즘은 이벤트 루프라고 하며, Node.js에 의해 널리 알려진 아이디어입니다.이러한 접근 방식은 확장 가능하고 탄력적입니다.Spring 5의 Spring-webflux는 이벤트 루프 접근 방식을 사용하여 비동기 동작을 제공합니다.

자세한 내용은 에서 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/46606246/spring-mvc-async-vs-spring-webflux

반응형