2009-03-18 1 views
23

Mir wurde gesagt, dass ASP.NET in IIS standardmäßig Multithread ist. Wie wird dieses Threading erreicht?Wie ist ASP.NET Multithread?

Sendet die Serverfarm unterschiedliche Anforderungen an verschiedene Kerne?

Verwendet eine einzelne Anfrage mehrere Kerne?

Noch wichtiger, gibt es Vorteile beim Hinzufügen von Threads zu ASP.NET-Code, wenn das Threading höher in IIS getan wird?

+3

Jede Website von Design ist multi-threaded, wird jede Anforderung weitgehend mit allen anderen Anforderungen parallel serviert –

Antwort

5

IIS verwendet automatisch die mehreren Kerne (alt aber wenn Sie es wünschen, können Sie es ausschalten. Der Vorteil des Hinzufügens von Threads zu ASP.NET-Code besteht darin, dass Sie die internen Abläufe Ihrer eigenen Anwendung steuern können und nicht gezwungen sind, sich auf IIS zu verlassen, um alle Entscheidungen für Sie zu treffen.

+0

Das ist ein vager Vorteil –

+0

Stellen Sie eine vage Frage, erhalten Sie eine vage Antwort. Die einzig mögliche Antwort für die letzte der vier ursprünglichen Fragen lautet: "Es kommt darauf an." –

3

Für jede neue Anforderung wird normalerweise ein separater Thread generiert, und das Betriebssystem führt dann die Prozessorplanung durch. Wenn Sie nur ein paar Anfragen gleichzeitig bearbeiten müssen, benötigen Sie kein zusätzliches Threading.

+0

Ihre Antwort schlägt vor, dass eine Anfrage für die gesamte Lebensdauer in demselben Thread verbleibt, was nicht wahr ist (und diese Annahme kann zu Problemen führen, wenn Sie Thread-Statik verwenden). –

+0

Nun, wir haben Programme nie auf Thread-Agilität aufmerksam gemacht, also hatte ich vorher keine Ahnung davon. – sharptooth

+0

Verwendet IIS nicht auch einen Thread-Pool? Afaik erzeugt beim Start Threads, die dann zwischen den Anfragen wiederverwendet werden. – Mendelt

23

Nicht nur bearbeitet der Server unterschiedliche Anforderungen an verschiedene Threads, sondern eine einzige Anfrage kann Thread im Laufe des Lebenszyklus ändern. Dies wird Thread Agilität genannt. Ich bin auf der Suche nach einem guten Artikel, der es erklärt ...

EDIT: Keine endgültigen Artikel noch, aber one blog post erklären einige der Schwierigkeiten.

EDIT: Weitere Links von Kommentaren:

+1

Eine Anforderung wird jedoch nicht zu einem bestimmten Zeitpunkt in mehreren Threads ausgeführt, sodass die gesamte Anforderungsbehandlung am Ende des Tages als single-threaded angezeigt werden kann. (Oder nicht?) – Tomalak

+1

@Tomalak: Nein, es kann nicht als single-threaded angesehen werden, weil es Thread ändern kann. Das heißt, wenn Sie Dinge zu Beginn der Anfrage in eine [ThreadStatic] -Variable stecken, ist sie möglicherweise am Ende der Anfrage nicht vorhanden. –

+0

@Jon Ich denke, das kompliziert die Idee, andere Threads aus einer Anfrage noch weiter hervorzubringen, nicht wahr? – sharptooth

8

ASP.net verwendet den .NET Threadpool (der konfigurierbar ist) Jede Anfrage wird von einem der Threads im Threadpool empfangen, bis jeder Thread bereits belegt ist. Dann werden Queues im IIS-Stack anstehen, bis auch dieser überläuft. Von dort werden neue Anfragen mit der sehr hässlichen "Server ist nicht verfügbar" Nachricht erfüllt.

Dies ist die übliche Multi-Threading-Geschichte für eine ASP.net-Website.

Es gibt viele Möglichkeiten, die Skalierbarkeit zu gewährleisten. Am offensichtlichsten sind Leistungstests und das Entfernen von Engpässen aus Ihrem Code.

ASP.net kann wirklich mehrere Kerne nutzen, indem die E/A-Threads für jede E/A-Anforderung verwendet werden. Es macht hässlichen Code aber schnell war nie schön.

Hier ist die endgültige MSDN MAG Post auf, wie dies

UPDATE tun

Nun, ich wahrscheinlich versuchen, Ihre vollständige Frage zu beantworten:

„Noch wichtiger ist es ein Vorteil Hinzufügen von Threads zu ASP.Net Code, wenn das Threading ist höher in IIS getan? "

Die kurze Antwort ist: Es kommt darauf an! Wenn Sie auf einen lang andauernden Prozess warten, sollten Sie eine bessere Erfahrung für den anfordernden Client (dh Out-of-Band-AJAX-Aufrufe)

implementieren, wenn Sie mehrere unabhängige Aufgaben haben, die abgeschlossen werden müssen der anfragende Client: Dann können Sie besser einen neuen Prozess erstellen, um die Aufgaben parallel auszuführen.

Wenn Ihre Website viele Besucher bekommt, dann müssen Sie wirklich Asynchronous Muster betrachten Implementierung besser auf Ihre CPU nutzen