Threadpool
Ik heb altijd al het project willen herschrijven naar asynchroon, maar ASP.NETMVC3 is te omslachtig om te schrijven, .NET 4.5 en ASP.NET MVC-code is relatief eenvoudig, MS lijkt dit altijd al leuk te hebben gevonden, bij elke volwassen ontwikkeling moet het meerdere versies ontwikkelen om te standaardiseren. ASP.NET waarom moet je asynchroon gebruiken in MVC? IIS heeft een threadpool om gebruikersverzoeken te verwerken; wanneer er een nieuw verzoek binnenkomt, worden de threads in de pool gepland om het verzoek te verwerken, maar als de gelijktijdigheid hoog is, kunnen de threads in de pool niet meer aan zoveel verzoeken voldoen, en is elke thread in de pool druk bij het verwerken van het verzoek, de thread die het verzoek verwerkt wordt geblokkeerd en kan de thread geen diensten leveren aan een ander verzoek; als de request queue vol is, het web De server wijst het verzoek af en bevindt zich in een HTTP 503 bezette toestand. Als je te maken hebt met hoge latentie, zoals netwerkoperaties, wachten de meeste van deze threads gewoon op de status en doen ze meestal niets; zulke threads kunnen asynchrone programmering gebruiken om er beter gebruik van te maken.
Asynchrone verwerking
Als een verzoek bijvoorbeeld een netwerkoproep genereert die twee seconden duurt om te voltooien, wordt het verzoek gedaanHet duurt twee seconden om zowel synchroon als asynchroon uit te voeren。 MaarTijdens een asynchrone aanroep blokkeert de server het antwoord op andere verzoeken niet terwijl hij wacht tot het eerste verzoek is afgerond。 Daarom kunnen asynchrone verzoeken bij veel verzoeken die langlopende operaties aanroepen, voorkomen dat verzoeken in de wachtrij komen. In .NET 4.5 is de maximale threadpool 5000, en zijn ook de await- en asynchrone trefwoorden toegevoegd in .NET 4.5 om asynchrone programmering te vereenvoudigen.
Synchroon of asynchroon (fragment uit MSDN)
- Typisch worden synchronisatiepijplijnen gebruikt wanneer aan de volgende voorwaarden is voldaan:
- Eenvoudige bediening of korte gebruikstijd.
- Eenvoud is belangrijker dan efficiëntie.
- Deze bewerking bestaat voornamelijk uit CPU-operaties in plaats van bewerkingen die veel schijf- of netwerkoverhead vereisen. Het gebruik van een asynchrone bewerkingsmethode voor CPU-gebonden operaties levert geen voordeel op en leidt ook tot meer overhead.
In het algemeen worden asynchrone pijplijnen gebruikt wanneer aan de volgende voorwaarden is voldaan:
- Operaties zijn netwerkgebonden of I/O-gebonden in plaats van CPU-gebonden.
- Tests hebben aangetoond dat blokkeringsoperaties een bottleneck zijn voor de siteprestaties, en door asynchrone methoden te gebruiken voor deze blokkeringsaanroepen, kan IIS meer verzoeken uitvoeren.
- Parallelisme is belangrijker dan eenvoud van code.
- Je wilt een mechanisme bieden waarmee gebruikers langlopende verzoeken kunnen annuleren.
ASP.NET gebruik asynchrone controllers in MVC
|