Trådpulje
Jeg har altid ønsket at omskrive projektet til asynkront, men ASP.NETMVC3 er for besværligt at skrive, .NET 4.5 og ASP.NET MVC-kode er relativt simpelt, MS har tilsyneladende altid kunnet lide at gøre dette, for alt modent skal det udvikle flere versioner for at kunne standardiseres. ASP.NET hvorfor skal du bruge asynkron i MVC? IIS har en trådpulje til at behandle brugerforespørgsler; når en ny anmodning kommer, vil trådene i puljen blive planlagt til at behandle forespørgslen, men når samtidigheden er høj, kan trådene i puljen ikke længere opfylde så mange forespørgsler, og hver tråd i puljen er optaget, når anmodningen behandles, vil tråden, der behandler anmodningen, blive blokeret, og tråden kan ikke levere tjenester til en anden anmodning, hvis anmodningskøen er fuld, web Serveren afviser anmodningen og er i en HTTP 503 optaget tilstand. Hvis du har med høj latenstid, som netværksoperationer, venter de fleste af disse tråde bare på tilstanden og gør ingenting det meste af tiden, sådanne tråde kan bruge asynkron programmering for bedre at udnytte det.
Asynkron behandling
For eksempel, hvis en anmodning genererer et netværkskald, der tager to sekunder at fuldføre, foretages anmodningenDet tager to sekunder at udføre både synkront og asynkront。 MenUnder et asynkront kald blokerer serveren ikke svaret på andre forespørgsler, mens den venter på, at den første anmodning bliver færdig。 Derfor, når der er mange forespørgsler, der kalder langvarige operationer, kan asynkrone forespørgsler forhindre forespørgsler i kø. I .NET 4.5 er den maksimale trådpulje 5000, og nøgleordene await og async er også tilføjet i .NET 4.5 for at forenkle asynkron programmering.
Synkron eller asynkron (uddrag fra MSDN)
- Typisk bruges synkroniseringspipelines, når følgende betingelser er opfyldt:
- Simpel drift eller kort driftstid.
- Enkelhed er vigtigere end effektivitet.
- Denne operation er primært CPU-operationer frem for operationer, der involverer meget disk- eller netværksoverhead. At bruge en asynkron driftsmetode til CPU-bundne operationer giver ingen fordel og medfører også mere overhead.
Generelt anvendes asynkrone pipelines, når følgende betingelser er opfyldt:
- Operationerne er netværksbundne eller I/O-bundne i stedet for CPU-bundne.
- Tests har vist, at blokeringsoperationer er en flaskehals for site-ydelsen, og ved at bruge asynkrone metoder til disse blokeringer kan IIS håndtere flere forespørgsler.
- Parallelisme er vigtigere end enkelhed i koden.
- Du vil gerne tilbyde en mekanisme, der gør det muligt for brugere at annullere langvarige forespørgsler.
ASP.NET bruger asynkrone controllere i MVC
|