2017-10-06 5 views
3

Ich versuche Spring WebFlux zu verstehen. Die Dinge, die ich bisher gefunden habe, sind im Kern reaktiv, keine Servlet API, kein Thread pro Anfrage, HTTP 2, Server Pushs, Anwendung/Stream + JSON.Spring MVC (async) vs Spring WebFlux

Aber was ist der Unterschied zwischen asynchronen Aufrufen in Spring MVC? Ich meine in Spring MVC, wenn Sie Future, DepfferedResult und etc zurückgeben, erhalten Sie Logik in der Request-Handler (Controller-Methode) in einem separaten Thread ausgeführt, so dass Sie Thread-Pool-Ressourcen für das Versenden von Anforderungen profitieren können.

Könnten Sie bitte die damit verbundenen Unterschiede hervorheben? Warum ist WebFlux hier besser?

Vielen Dank für Ihre Zeit!

+1

Reaktive Programmierung ist Push-gesteuert und verwendet einen einzelnen Dispatcher-Thread (der sehr effizient ist), während das alte Modell immer noch auf die Anzahl der Threads in Ihrem Thread-Pool beschränkt ist. –

+0

@M. Deinum Aber in diesem Fall bin ich mit der Belastung begrenzt, die ein Thread bewältigen kann. Warum nicht mehrere davon verwenden, nicht nur eines mit Multicore-System? –

+1

Es ist ein Event-Dispatcher-Thread, es ist ein völlig anderes Modell. Es löst nur Ereignisse aus (sehr schnell), während das andere Modell immer noch blockiert. –

Antwort

3

Das Servlet-Async-Modell führt eine asynchrone Grenze zwischen den Container-Threads (1 Servlet-Anforderung/Thread-Modell) und der Verarbeitung der Anforderung in Ihrer Anwendung ein. Die Verarbeitung kann in einem anderen Thread stattfinden oder warten. Am Ende müssen Sie zurück zu einem Container-Thread senden und blockierend lesen/schreiben (InputStream und OutputStream sind inhärent blockierende APIs).

Mit diesem Modell benötigen Sie viele Threads, um Parallelität zu erreichen (da viele davon blockiert werden können, wenn sie auf I/O warten). Dies kostet Ressourcen und kann je nach Anwendungsfall ein Kompromiss sein.

Mit nicht blockierendem Code benötigen Sie nur wenige Threads, um viele Anfragen gleichzeitig zu verarbeiten. Dies ist ein anderes Nebenläufigkeitsmodell; Wie bei jedem Modell gibt es Vorteile und Kompromisse.

Für weitere Informationen über diesen Vergleich sollte dieser Servlet vs. Reactive stacks talk von Interesse sein.

+1

Danke für die Antwort und für den nützlichen Link! –