Пул потоків
Я завжди хотів переписати проєкт на асинхронний, але 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)
- Зазвичай синхронні конвеєри використовуються, коли виконуються такі умови:
- Проста робота або короткий час роботи.
- Простота важливіша за ефективність.
- Ця операція насамперед стосується операцій процесора, а не з великими накладними витратами на диск або мережу. Використання асинхронного методу роботи для операцій, обмежених процесором, не дає жодної користі і також призводить до більших накладних витрат.
Загалом, асинхронні конвеєри використовуються, коли виконуються такі умови:
- Операції пов'язані з мережею або з обмеженням вводу/виходу, а не з процесором.
- Тести показали, що операції блокування є вузьким місцем для продуктивності сайту, і використання асинхронних методів для цих викликів дозволяє IIS обслуговувати більше запитів.
- Паралелізм важливіший за простоту коду.
- Ви хочете надати механізм, який дозволить користувачам скасовувати довготривалі запити.
ASP.NET використовувати асинхронні контролери в MVC
|