Pula wątków
Zawsze chciałem przepisać projekt na asynchroniczny, ale ASP.NETMVC3 jest zbyt uciążliwy do napisania, .NET 4.5 i ASP.NET kod MVC jest stosunkowo prosty, Microsoft wydaje się zawsze lubił to robić, każda dojrzała rzecz musi ewoluować kilka wersji, by się ustandaryzować. ASP.NET dlaczego w MVC trzeba używać asynchroniczności? IIS ma pulę wątków do przetwarzania żądań użytkowników. Gdy pojawia się nowe żądanie, wątki w puli są zaplanowane do jego przetwarzania, jednak gdy współbieg jest wysoki, wątki w puli nie mogą już spełniać tylu żądań, a każdy wątek w puli jest zajęty podczas przetwarzania żądania, wątek przetwarzający żądanie zostanie zablokowany, a wątek nie może świadczyć usług innemu żądaniu, jeśli kolejka żądań jest pełna, sieć Serwer odrzuca żądanie i znajduje się w stanie zajętego HTTP 503. Jeśli masz do czynienia z wysokim opóźnieniem, na przykład operacjami sieciowymi, większość tych wątków po prostu czeka na stan i przez większość czasu nic nie robi, takie wątki mogą korzystać z programowania asynchronicznego, aby lepiej je wykorzystać.
Przetwarzanie asynchroniczne
Na przykład, jeśli żądanie generuje połączenie sieciowe, którego wykonanie trwa dwie sekundy, żądanie jest realizowaneWykonanie trwa dwie sekundy zarówno synchronicznie, jak i asynchronicznie。 AlePodczas połączenia asynchronicznego serwer nie blokuje odpowiedzi na inne żądania, czekając na zakończenie pierwszego żądania。 Dlatego gdy wiele żądań wywołuje długotrwałe operacje, żądania asynchroniczne mogą uniemożliwić kolejkowanie żądań. W .NET 4.5 maksymalna pula wątków wynosi 5000, a słowa kluczowe oczekiwania i async zostały również dodane w .NET 4.5, aby uprościć programowanie asynchroniczne.
Synchroniczne lub asynchroniczne (fragment z MSDN)
- Zazwyczaj potoki synchronizacyjne są używane, gdy spełnione są następujące warunki:
- Prosta obsługa lub krótki czas działania.
- Prostota jest ważniejsza niż efektywność.
- Operacja ta polega głównie na operacjach CPU, a nie na dużych narzutach dysku lub sieci. Stosowanie asynchronicznej metody pracy do operacji ograniczonych od procesora nie przynosi żadnych korzyści i powoduje większe narzuty.
Ogólnie rzecz biorąc, potoki asynchroniczne są stosowane, gdy spełnione są następujące warunki:
- Operacje są ograniczone od sieci lub I/O, a nie od procesora.
- Testy wykazały, że operacje blokujące są wąskim gardłem dla wydajności stanowiska, a dzięki zastosowaniu asynchronicznych metod do tych wywołań IIS może obsługiwać więcej żądań.
- Paralelizm jest ważniejszy niż prostota kodu.
- Chcesz zapewnić mechanizm, który pozwala użytkownikom anulować długoletnie żądania.
ASP.NET używać asynchronicznych kontrolerów w MVC
|