Пул от нишки
Винаги съм искал да пренапиша проекта на асинхронен, но ASP.NETMVC3 е твърде тромав за писане, .NET 4.5 и ASP.NET MVC кодът е сравнително прост, MS сякаш винаги е обичал да прави това, всяко зряло нещо трябва да развие няколко версии, за да се стандартизира. ASP.NET защо трябва да се използва асинхронно в MVC, IIS има пул от нишки за обработка на потребителски заявки, но когато пристигне нова заявка, нишките в пула ще бъдат планирани да я обработват, но когато съвместимостта е висока, нишките в пула вече не могат да посрещнат толкова много заявки, и всяка нишка в пула е заета при обработката на заявката, обработващата заявката ще бъде блокирана и нишката не може да предоставя услуги на друга заявка, ако опашката за заявки е пълна, уебът Сървърът отхвърля заявката и е в зает HTTP 503 режим. Ако имате работа с висока латентност, като мрежови операции, повечето от тези нишки просто чакат състоянието и не правят нищо през повечето време, такива нишки могат да използват асинхронно програмиране, за да го използват по-добре.
Асинхронна обработка
Например, ако заявка генерира мрежово обаждане, което отнема две секунди, заявката се правиИзпълнението му отнема две секунди както синхронно, така и асинхронно。 НоПо време на асинхронно обаждане сървърът не блокира отговора на други заявки, докато чака първата заявка да бъде завършена。 Следователно, когато има много заявки, които извикват дългосрочни операции, асинхронните заявки могат да предотвратят опашката на заявките. В .NET 4.5 максималният пул от нишки е 5000, а ключовите думи await и async са добавени и в .NET 4.5, за да се опрости асинхронното програмиране.
Синхронно или асинхронно (откъс от MSDN)
- Обикновено синхронизираните конвейери се използват, когато са изпълнени следните условия:
- Проста работа или кратко време за изпълнение.
- Простотата е по-важна от ефективността.
- Тази операция е предимно CPU операции, а не операции, които включват много дискови или мрежови извънредни разходи. Използването на асинхронен оперативен метод за операции, ограничени от процесора, не носи никаква полза и води до повече допълнителни разходи.
Обикновено асинхронните конвейери се използват, когато са изпълнени следните условия:
- Операциите са свързани с мрежата или I/O, а не към CPU.
- Тестовете показват, че операциите по блокиране са тесно място за производителността на сайта, а чрез използване на асинхронни методи за тези блокиращи повиквания, IIS може да обслужва повече заявки.
- Паралелизмът е по-важен от простотата на кода.
- Искате да предоставите механизъм, който позволява на потребителите да отменят дългогодишни заявки.
ASP.NET използват асинхронни контролери в MVC
|