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
'programing' 카테고리의 다른 글
사용자가 로그인한 후 Larvel 5 세션이 유지되지 않음 (0) | 2023.07.28 |
---|---|
파이썬 메소드 오버라이드, 서명이 중요합니까? (0) | 2023.07.28 |
요소가 표시되는 시점에 대한 이벤트 수신기? (0) | 2023.07.28 |
utf8_(en|de)코드가 php7에서 제거되었습니까? (0) | 2023.07.23 |
값의 범위에 따라 그룹화된 판다 (0) | 2023.07.23 |