Pool de fire
Întotdeauna am vrut să rescriu proiectul în asincron, dar ASP.NETMVC3 este prea greoi de scris, .NET 4.5 și codul MVC ASP.NET sunt relativ simple, MS pare să fi vrut mereu să facă asta, fiecare lucru matur trebuie să evolueze mai multe versiuni pentru a se standardiza. ASP.NET de ce trebuie să folosești asincron în MVC, IIS are un pool de fire pentru a procesa cererile utilizatorilor, când vine o cerere nouă, firele din pool vor fi programate să proceseze cererea, însă când concurența este mare, firele din pool nu mai pot răspunde atât de multor cereri, iar fiecare fire din pool este ocupată în procesarea cererii, firele care procesează cererea vor fi blocate, iar firele nu pot oferi servicii unei alte cereri; dacă coada de cereri este plină, web-ul Serverul respinge cererea și este într-o stare HTTP 503 ocupată. Dacă ai de-a face cu o latență mare, cum ar fi operațiunile de rețea, majoritatea acestor fire doar așteaptă starea și nu fac nimic de cele mai multe ori, astfel de fire pot folosi programare asincronă pentru a o folosi mai bine.
Procesare asincron
De exemplu, dacă o cerere generează un apel de rețea care durează două secunde pentru a fi finalizat, cererea este făcutăDurează două secunde pentru a se executa atât sincron, cât și asincron。 DarÎn timpul unui apel asincron, serverul nu blochează răspunsul la alte cereri în timp ce așteaptă finalizarea primei cereri。 Prin urmare, atunci când există multe cereri care apelează operații de lungă durată, cererile asincrone pot împiedica coada cererilor. În .NET 4.5, pool-ul maxim de fire este de 5000, iar cuvintele cheie await și async au fost adăugate în .NET 4.5 pentru a simplifica programarea asincronă.
Sincron sau asincron (fragment din MSDN)
- De obicei, pipeline-urile de sincronizare sunt folosite atunci când sunt îndeplinite următoarele condiții:
- Funcționare simplă sau durată scurtă.
- Simplitatea este mai importantă decât eficiența.
- Această operațiune este în principal operațiuni CPU, mai degrabă decât operațiuni care implică multă suprasolicitare a discului sau a rețelei. Folosirea unei metode de operare asincronă pentru operații legate de CPU nu aduce niciun beneficiu și duce și la o sarcină suplimentară.
În general, conductele asincrone sunt folosite atunci când sunt îndeplinite următoarele condiții:
- Operațiile sunt legate de rețea sau de I/O, nu de CPU.
- Testele au arătat că operațiunile de blocare reprezintă un blocaj în calea performanței site-ului, iar prin utilizarea metodelor asincrone pentru aceste apeluri de blocare, IIS poate deservi mai multe cereri.
- Paralelismul este mai important decât simplitatea codului.
- Vrei să oferi un mecanism care să permită utilizatorilor să anuleze cererile de lungă durată.
ASP.NET folosesc controlere asincrone în MVC
|