Thread pool
Vždycky jsem chtěl přepsat projekt do asynchronního režimu, ale ASP.NETMVC3 je příliš složité na psaní, .NET 4.5 a ASP.NET kód pro MVC je relativně jednoduchý, Microsoft to vždycky rád dělal, každá vyspělá věc musí vyvíjet několik verzí, aby se standardizovala. ASP.NET proč je potřeba používat asynchronní v MVC, IIS má pool vláken pro zpracování uživatelských požadavků. Když přijde nový požadavek, vlákna v poolu jsou naplánována k jeho zpracování, ale když je souběžnost vysoká, vlákna v poolu už nemohou splnit tolik požadavků a všechna vlákna ve poolu jsou při zpracování požadavku zaneprázdněná, vlákno zpracovávající požadavek bude zablokováno a vlákno nemůže poskytovat služby jinému požadavku, pokud je fronta požadavků plná, web Server požadavek odmítne a je ve stavu obsazené HTTP 503. Pokud máte vysokou latenci, například síťové operace, většina těchto vláken jen čeká na stav a většinu času nic nedělá, taková vlákna mohou využívat asynchronní programování pro lepší využití.
Asynchronní zpracování
Například pokud požadavek generuje síťový hovor, jehož dokončení trvá dvě sekundy, požadavek je vykonánTrvá dvě sekundy na synchronní i asynchronní provedení。 AleBěhem asynchronního hovoru server neblokuje odpověď na jiné požadavky, zatímco čeká na dokončení prvního požadavku。 Proto když je mnoho požadavků volajících dlouhodobě běžící operace, asynchronní požadavky mohou zabránit frontování požadavků. V .NET 4.5 je maximální pool vláken 5000 a klíčová slova await a async byla také přidána v .NET 4.5, aby se zjednodušilo asynchronní programování.
Synchronní nebo asynchronní (ukázka z MSDN)
- Typicky se synchronizační pipeline používají, když jsou splněny následující podmínky:
- Jednoduchá obsluha nebo krátká doba provozu.
- Jednoduchost je důležitější než efektivita.
- Tato operace je primárně operace CPU, nikoli operace vyžadující velkou diskovou nebo síťovou zátěž. Použití asynchronní metody pro operace vázané na CPU nepřináší žádný přínos a zároveň vede k většímu režii.
Obecně se asynchronní potrubí používají tehdy, když jsou splněny následující podmínky:
- Operace jsou vázané na síť nebo I/O, nikoli na CPU.
- Testy ukázaly, že blokovací operace jsou úzkým hrdlem pro výkon lokality, a díky asynchronním metodám pro tyto blokovací volání může IIS obsloužit více požadavků.
- Paralelismus je důležitější než jednoduchost kódu.
- Chcete zajistit mechanismus, který uživatelům umožní zrušit dlouhodobé požadavky.
ASP.NET používat asynchronní řadiče v MVC
|