Ai-je raison de dire que pour les applications Web, le conteneur Web prend en charge le multi-threading?
La plupart des serveurs Web (Java et autres, y compris JBoss) suivent un modèle "un thread par requête", c'est-à-dire que chaque requête HTTP est entièrement traitée par exactement un thread. Ce thread passera souvent la plupart du temps à attendre des choses comme les requêtes DB. Le conteneur Web créera de nouveaux threads si nécessaire.
Certains serveurs (dans l'écosystème Java principalement Netty ) effectuent le traitement des demandes asynchrones, soit avec un modèle «un thread fait tout», soit quelque chose de plus complexe. L'idée de base est que le fait d'avoir beaucoup de threads en attente gaspille des ressources, donc travailler de manière asynchrone peut être plus efficace.
Si oui, puis-je introduire de nouvelles marches dans une application Web?
C'est possible, mais cela doit être fait très soigneusement, car les erreurs (comme les fuites de mémoire ou la synchronisation manquante) peuvent provoquer des bogues très difficiles à reproduire ou faire tomber l'ensemble du serveur.
Y a-t-il un avantage à le faire et dans quel scénario faudrait-il le faire?
Eh bien, l'avantage est que vous pouvez faire des choses en parallèle. L'utilisation de threads pour améliorer la vitesse de calcul pure est quelque chose que vous ne devriez pas faire sur un serveur Web, car cela ralentirait le traitement des autres requêtes. Ce genre de chose devrait être fait sur un serveur séparé, probablement à l'aide d'une sorte de file d'attente de travaux.
Un scénario légitime pour le multithreading dans le contexte de la gestion d'une requête HTTP pourrait être si vous avez besoin d'accéder à d'autres ressources réseau, par exemple appeler plusieurs services Web différents. Si vous le faites en une seule fois, vous devez attendre que chaque appel se termine à son tour. Mais si vous utilisez plusieurs threads, le temps d'attente total n'est que le retard de l'appel le plus lent.
Concurrency Utilities
.