Sprechen über ein reales Beispiel gibt es mehr Gründe, Multi-Threading zu verwenden, und ich würde keinen Web-Entwickler einstellen, der nichts davon weiß. Aber am Ende sind die Gründe für die Verwendung von Multi-Threading die gleichen für die Standard- und Web-Entwicklung: Entweder wollen Sie etwas, das im Hintergrund eine Weile dauert (auch bekannt als Blocking), um dem Benutzer eine Antwort dazwischen zu geben oder Sie eine Aufgabe haben, die beschleunigt werden kann, indem sie auf mehreren Kernen ausgeführt wird. Wann Multithreading tatsächlich sinnvoll ist, ist jedoch eine andere Frage.
Situation 1: Ein Web-Server, der eine Verarbeitung erfordert und hat niedrige Treffer/Sekunde
Hier Multi-Threading (ggf. den Algorithmus) eine gute Sache ist, wie im Leerlauf Kern verwendet, und Einfädeln kann zu einer schnelleren Reaktion auf den Benutzer führen.
Situation 2: Ein Web-Server, der eine Verarbeitung erfordert und hohe Treffer/Sekunde
Hier Multi-Threading ist möglich, aber als Kerne in der Regel beschäftigt mit anderen Anfragen sind, gibt es keine Ressourcen links nach benutze es richtig. Das Aufteilen der Aufgabe auf mehrere Threads kann sich sogar negativ auf die Antwortzeit auswirken, da die Task nun fragmentiert ist und alle Teile abgeschlossen werden müssen. Die Reihenfolge der Ausführung mit Threads ist jedoch nicht definiert. So könnte ein Client sofort eine Antwort erhalten, während andere auf eine Auszeit warten könnten, bis ihr letztes Fragment schließlich verarbeitet wird.
Situation 3: Ein Web-Server eine Verarbeitung, die eine sehr lange Zeit
Hier Multi-Threading erforderlich ist, gibt es keinen Weg, um es dauert zu tun hat. Ein Client kann nicht Minuten oder wahrscheinlich Stunden warten, bis er die Antwort erhält. In diesem Fall wird in der Regel ein Callback-System implementiert, so dass im Prinzip jede Task eine "API" hat, die nach dem aktuellen Status abgefragt werden kann. Die meisten Online-Shops sind dafür ein Beispiel: Sie bestellen etwas und später können Sie Ihren Bestellstatus abfragen.
Die Alternative zum Threading ist das Forking, wie es Apache in seiner Standardkonfiguration tut. Der Vorteil besteht darin, dass die Last über die Kerne verteilt wird (meistens anwendbar auf Situation 2), und der Web-Code selbst muss nichts tun, um all diese Kerne zu verwenden, da das OS dies automatisch handhabt. Wenn Sie jedoch eine unausgeglichene Last haben, können einige Kerne inaktiv sein und die Ressourcen werden nicht optimal genutzt. Eine Threading-Situation ist fast immer die bessere Lösung, wenn es richtig gemacht wird. Die Apache/Tomcat-Standardkonfiguration verwendet jedoch ein sehr veraltetes Threading-Modell, indem für jede Anforderung ein Thread erstellt wird. Bei einer bestimmten Anzahl von Hits/Sekunde ist die CPU mehr mit dem Threading beschäftigt als mit der tatsächlichen Verarbeitung dieser Anforderungen.
IMHO, Sie sind absolut richtig, dass die Hauptaufgabe von Multithreading in Web-Anwendungen ist, mehrere unabhängige Anfragen gleichzeitig zu behandeln, und damit den Server reagieren. – Ingo
Als Beispiel haben Sie eine Benutzerregistrierungsseite und Sie müssen diesem Benutzer eine E-Mail-Benachrichtigung bezüglich der Registrierung senden. In diesem Fall können wir Multithreading verwenden, indem wir eine E-Mail in einem separaten Thread senden. – Foolish
Ich verwende Multi Threading zum Parsen von xmls –