Spring MVC (async) vs Printemps WebFlux
J'essaie de comprendre Printemps WebFlux. Les choses que j'ai trouvé à ce jour sont réactifs à la base, pas de Servlet API, pas de fil par demande, HTTP 2, serveur pousse, application/flux+json.
Mais quelle est la différence entre les appels asynchrones dans Spring MVC? Je veux dire, Spring MVC, lorsque vous revenez à l'Avenir, DefferedResult et etc vous obtenez logique dans le gestionnaire de requêtes (méthode de contrôleur) exécutée dans un thread séparé, de sorte que vous pouvez bénéficier de l'économie d'thread pool de ressources pour la distribution des demandes ainsi.
Donc, pourriez-vous s'il vous plaît mettre en évidence les différences liées à cela? Pourquoi WebFlux est mieux ici?
Je vous remercie pour votre temps beaucoup!
- Réactif de programmation est poussée de moteur, et utilise un seul répartiteur de thread (ce qui est très efficace) alors que l'ancien modèle est encore limité pour le nombre de threads dans votre pool de threads.
- Deinum Mais dans ce cas, je suis limité par la charge d'un thread peut le gérer. Pourquoi ne pas utiliser plusieurs d'entre eux, pas juste en ayant un système multicœur?
- C'est un événement dispatcher fil, elle est un modèle entièrement différent. Il distribue uniquement des événements (très rapidement) alors que l'autre modèle est toujours le blocage.
- Deinum ok, c'est très intéressant, je suis sûr que je devrais prendre un coup d'oeil, merci!
- Deinum, s'il vous plaît partager cycle de vie de demande
- Deinum, le printemps peut travailler avec servlet 3.1 sans webflux (completableFuture un type de retour + tomcat 8.5+)
Vous devez vous connecter pour publier un commentaire.
La Servlet async modèle introduit un async frontière entre le conteneur des threads (1 Servlet demande/modèle de thread) et le traitement de la requête dans votre demande. Le traitement peut se produire sur un thread différent ou d'attendre. En fin de compte, vous devez d'expédition de retour pour un récipient de fil et de lire/écrire dans un blocage de la voie (
InputStream
etOutputStream
sont intrinsèquement blocage Api).Avec ce modèle, vous avez besoin de nombreux threads pour parvenir à la concurrence (parce que beaucoup de ceux-ci peuvent être bloqués en attente d'e/S). Ce des coûts des ressources et il peut être nécessaire de trouver un compromis, selon votre cas d'utilisation.
Avec les non-blocage de code, vous avez besoin seulement d'un petit nombre de threads pour traiter beaucoup de demandes en même temps. C'est un autre modèle d'accès simultané; comme tout modèle, il y a des avantages et des compromis à venir avec elle.
Pour plus d'informations sur cette comparaison, ce Servlet Réactive et piles de parler devrait être d'intérêt.
Servlet API est blocage I/O qui nécessite 1 thread par requête HTTP. Spring MVC asynchrone repose sur la Servlet Api qui fournit seulement async comportement entre les conteneur des threads et de la demande de threads de traitement, mais pas de fin à la fin.
Printemps WebFlux d'autre part réalise la simultanéité par un nombre fixe de threads à l'aide de HTTP sockets et de pousser des blocs de données à la fois via les sockets. Ce mécanisme est appelé boucle d'événement de, une idée rendu populaire par Node.js. Une telle approche est évolutive et résiliente. Le ressort 5 est le printemps-webflux utilise le boucle d'événement de approche asynchrone comportement.
Plus peut être lu à partir de