Stimmt es, dass der Webcontainer für Webanwendungen das Multithreading übernimmt?
Die meisten Webserver (Java und andere, einschließlich JBoss) folgen einem Modell "Ein Thread pro Anfrage", dh jede HTTP-Anfrage wird vollständig von genau einem Thread verarbeitet. Dieser Thread verbringt häufig die meiste Zeit damit, auf Dinge wie DB-Anforderungen zu warten. Der Webcontainer erstellt bei Bedarf neue Threads.
Einige Server (im Java-Ökosystem in erster Linie Netty ) führen eine asynchrone Anforderungsverarbeitung durch, entweder mit einem Modell "Ein Thread erledigt alles" oder mit einem komplexeren Modell. Die Grundidee dabei ist, dass viele wartende Threads Ressourcen verschwenden, sodass asynchrones Arbeiten effizienter sein kann.
Wenn ja, kann ich neue Schritte in webbasierten Anwendungen einführen?
Dies ist möglich, sollte aber sehr sorgfältig durchgeführt werden, da Fehler (wie Speicherverluste oder fehlende Synchronisierung) zu schwer reproduzierbaren Fehlern führen oder den gesamten Server zum Stillstand bringen können.
Gibt es einen Vorteil dabei und in welchem Szenario müsste man das tun?
Der Vorteil ist, dass Sie parallel arbeiten können. Mit Gewinden reine Rechengeschwindigkeit zu verbessern , ist etwas , das Sie sollen nicht auf einem Webserver tun, da sie den Umgang mit anderen Anforderungen verlangsamen würde. Dies sollte auf einem separaten Server durchgeführt werden, wahrscheinlich unter Verwendung einer Jobwarteschlange.
Ein legitimes Szenario für Multithreading im Zusammenhang mit der Verarbeitung einer HTTP-Anforderung kann sein, dass Sie auf andere Netzwerkressourcen zugreifen müssen, z. B. mehrere verschiedene Webdienste aufrufen. Wenn Sie es in einem Zug tun, müssen Sie warten, bis jeder Anruf der Reihe nach beendet ist. Wenn Sie jedoch mehrere Threads verwenden, ist die gesamte Wartezeit nur die Verzögerung des langsamsten Einzelaufrufs.
Concurrency Utilities
.