Niidibassein
Olen alati tahtnud projekti asünkroonseks ümber kirjutada, aga ASP.NETMVC3 on liiga kohmakas kirjutada, .NET 4.5 ja ASP.NET MVC kood on suhteliselt lihtne, MS tundub alati meeldivat seda teha, iga küps asi peab arendama mitmeid versioone, et standardiseeruda. ASP.NET miks on vaja kasutada asünkroonset MVC-s, IIS-il on lõimebassein kasutajapäringute töötlemiseks, kuid kui tuleb uus päring, ajastatakse pooli lõimed päringu töötlemiseks, kuid kui samaaegsus on suur, ei suuda pooli lõimed enam nii paljusid päringuid täita ning iga pooli lõim on hõivatud päringu töötlemisel, lõim, mis päringut töötleb, blokeeritakse ja lõim ei saa pakkuda teenuseid teisele päringule, kui päringujärjekord on täis, veeb Server lükkab taotluse tagasi ja on HTTP 503 hõivatud olekus. Kui tegemist on kõrge latentsusega, näiteks võrgutoimingutega, siis enamik neist lõimedest ootab olekut ja ei tee enamasti midagi, sellised lõimed saavad kasutada asünkroonset programmeerimist, et seda paremini kasutada.
Asünkroonne töötlemine
Näiteks, kui päring genereerib võrgukõne, mille täitmine võtab kaks sekundit, siis päring esitatakseSünkroonseks ja asünkroonseks käivitamiseks kulub kaks sekundit。 AgaAsünkroonse kõne ajal ei blokeeri server vastust teistele päringutele, oodates esimese päringu lõpetamist。 Seega, kui on palju taotlusi, mis kutsuvad pikaajalisi operatsioone, võivad asünkroonsed päringud takistada päringute järjekorda sattumist. .NET 4.5-s on maksimaalne lõimede hulk 5000 ning .NET 4.5-s on lisatud await ja asünkroonne märksõnad, et lihtsustada asünkroonset programmeerimist.
Sünkroonne või asünkroonne (katkend MSDN-ist)
- Tavaliselt kasutatakse sünkroonimistorusid siis, kui täidetud on järgmised tingimused:
- Lihtne operatsioon või lühike tööaeg.
- Lihtsus on olulisem kui efektiivsus.
- See operatsioon on peamiselt protsessori operatsioonid, mitte operatsioonid, mis nõuavad palju ketta või võrgu koormust. Asünkroonse töömeetodi kasutamine protsessoripõhiste operatsioonide jaoks ei too mingit kasu ja põhjustab ka suuremat koormust.
Üldiselt kasutatakse asünkroonneid torujuhtmeid, kui on täidetud järgmised tingimused:
- Operatsioonid toimuvad võrgus või I/O-s, mitte CPU-sidemes.
- Testid on näidanud, et blokeerimistoimingud on saidi jõudluse kitsaskoht ning kasutades asünkroonseid meetodeid nende blokeerimiskutsete jaoks, suudab IIS teenindada rohkem päringuid.
- Paralleelsus on olulisem kui koodi lihtsus.
- Soovid pakkuda mehhanismi, mis võimaldab kasutajatel tühistada pikaajalisi päringuid.
ASP.NET kasutavad MVC-s asünkroonneid kontrollereid
|