|
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 13
|
||||||
Асинхронные контроллеры19.08.2015, 23:17. Показов 3358. Ответов 10
Метки нет (Все метки)
Не совсем понимаю как работают асинхронные контроллеры в ASP.NET MVC.
Допустим есть два action method-а. Один синхронный второй асинхронный.
Запрос к db.Books сам по себе может занять некоторое время. 1 случай: При синхронной обработке запроса поток, обрабатывающий запрос, временно блокируется, пока БД не вернет нужные нам данные. И если обработка запроса блокируется очень долго, то IIS начинает задействовать для обслуживания других входящих запросов новые потоки. 2 случай: При асинхронной обработке поток не ждет, пока БД вернет ему данные, а обрабатывает запрос от другого пользователя. Но когда, наконец, с БД придут нужные данные, поток возвращается к обработке ранее обрабатываемого запроса в обычном режиме. Вопрос: В первом случае, если поток на долго блокируется, IIS создаст второй поток для обслуживания новых запросов (2 потока). Во втором случае тоже создается второй поток Task.Run(() => db.Books);. Если в обоих случаях создаются два потока то в чем разница? Или пул потоков CLR и пул потоков IIS это два абсолютно разных пула?
0
|
||||||
| 19.08.2015, 23:17 | |
|
Ответы с готовыми решениями:
10
Асинхронные запросы из ASP.NET асинхронные запросы (одновременное выполнение) Как отследить асинхронные вызовы |
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||
| 20.08.2015, 00:24 | ||||
|
вот поэтому и нужен асинхронный контроллер, чтобы в то время когда он ждет отклика от другого сервиса, он выполнял полезную работу, а не простаивал. как только отклик приходит, он возвращается к обработке первоначального запроса. Добавлено через 1 минуту
0
|
||||
|
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 13
|
||||||
| 20.08.2015, 00:53 [ТС] | ||||||
|
То есть, если я правильно понял, при асинхронной операции происходит следующее. IIS выделяет поток именно из пула робочих потоков для выполнения action method-а контроллера. Именно этот поток заходит в action method и начинает его выполнение. Когда он доходит до строчки
0
|
||||||
|
3 / 3 / 1
Регистрация: 30.01.2014
Сообщений: 22
|
|
| 20.08.2015, 16:16 | |
|
ToListAsync
http://www.codeproject.com/Tip... SP-NET-MVC
0
|
|
|
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 13
|
|
| 17.11.2015, 14:55 [ТС] | |
|
Может быть я просто не понимаю чем занимается пул потоков clr, а чем пул потоков iis. Любой метод контроллера выполняет пул потоков слр, а не иис, правильно? Тогда в первом случае выполнением задачи занимается скажем поток номер 3. А во втором ми просто говорим, поток номер 3 нам не нравится, забирайте его обратно и дайте нам какойто другой из пула слр? В чем выгода? Или если этот екшин метод имеет ключевое слово асинк то как то по другому на это реагирует пул потоков иис? Какой тогда workflow?
Добавлено через 12 минут Пользователь отравляет запрос, http.sys listener его ловит, потом выделяется поток из пула iis? На каком этапе тогда появляется поток из пула clr? Пока clr поток не обработает екшин метод, то поток из пула iis будет ждать ответ? Или в случае если метод с ключевым словом асинк то поток из пула иис не ожидает? Какой поток тогда обработает ответ от слр?
0
|
|
|
3 / 3 / 1
Регистрация: 30.01.2014
Сообщений: 22
|
|
| 17.11.2015, 14:57 | |
|
Здесь проблема не в потоках, а том что метод не ждет получения ответа от базы и отдает поток сразу. При получении ответа от базы выбирается новый поток и задача продолжается уже в новом потоке с места await .
await по сути это автомат, такой же как и yield
0
|
|
|
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 13
|
|
| 17.11.2015, 16:21 [ТС] | |
|
Поток отдается сразу... в этом и мой вопрос, который это поток iis илu clr? Екшин метод выполняется потоком из пула слр. Правильно ли я понимаю, разсудите плз. Пользователь отправляет запрос, хттп.сус драйвер его ловит, выделяется поток из пула потоков иис, потом запускается поток из пула слр и именно он выполняет код екшин метода. В первом случае поток из пула иис ожидает завершение работы потока из пула слр, во втором случае поток из пула слр запускает поток номер два а сам возвращает управление потоку иис, а тот возвращается в пул иис. А когда поток номер два завершит работу то он же продолжит выполнять все что после await а потом отдаст ответ в порт завершения ввода вывода?
0
|
|
|
3 / 3 / 1
Регистрация: 30.01.2014
Сообщений: 22
|
|
| 17.11.2015, 17:44 | |
|
Пул потоков для CLR отдельно, для натива отдельна. Ты можешь отдельно настроить приложение какой пул IIS будешь использовать. http://metanit.com/sharp/articles/mvc/10.php
0
|
|
|
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 13
|
|
| 18.11.2015, 02:53 [ТС] | |
|
Правильно ли я понимаю pipeline?:
- пришел запрос от пользователя, iis выделил поток (назовем поток 1) для обработки запроса - выделяется поток из пула clr (поток 2), Для обработки кода екшин метода При синхронном поток 1 ожидает ответ от потока 2. При асинхронном: - поток 2 порождает асинхронную операцию, и возвращает управление, поток 1 возвращается в пул потоков iis и может обрабатывать другие запросы. - когда асинхронная операция вернет результат, достанется поток из пула потоков clr(поток 3), обработает весь код после await, вернет управление - из пула потоков iis достанется поток 4 который и отправит результат пользователю. Ссылка на metanit меня еще больше запутала Я не понимаю что делают потоки из пула iis, а что делают потоки из пула clr, кто за что отвечает? На каком этапе поток из пула iis передает работу потоку из пула clr, а когда потом обратно? Какой поток когда возвращает управление? Пожалуйста обьясните
0
|
|
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
| 18.11.2015, 08:50 | |
|
это тема веселая, я помню часа три просидел на stackoverflow пытаясь понять в чем смысл )
всё очень просто - в асинхронном поток освобождается и может обрабатывать другие соединения, в этом весь смысл, ибо количество потоков ограниченно а во вторых Async != отдельный поток в глубинах винды есть своя специальная асинхронность на уровне прерываний, не помню как называется, неблокирующий или overlapped что-то там вот короче эта штуковина умеет не блокировать поток, не создавая при этом отдельный поток для некоторых случаев, для файлов точно есть, для сетевых операций тоже, может даже для БД что-то придумали меня так протроллили на собеседовании однажды, я бил пяткой в грудь что умею в потоки, а спросили как ngnix работая в 1 поток обрабатывает несметные тысячи соединений, вот так и работает(как и другие веб серверы)..
0
|
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 18.11.2015, 09:31 | ||
|
Сам не до конца понимаю, интересно стало, видимо ТС имел ввиду такой момент: один IO-поток из пула потоков IIS
принимает конкретный запрос и
1. В случае синхронной обработки (без async), метод действия выполняется в потоке пула до его завершения, даже если в коде идут какие-то долговременные IO-операции (запрос к базе и т.д.). 2. В случае асинхронной обработки из пула потоков берется какой-то свободный поток и в нем начинает выполняться метод. Поскольку метод async, то он сразу возвращает управление, то есть взятый поток снова возвращается в пул, при этом за счет использования Task-ов саму долговременную IO-операцию уже другой поток, причем тоже из пула потоков CLR. То есть плюс использования асинхронности в том, что потоки пула быстрее освобождаются и ,как следствие, меньше простаивают, и у нас появляется возможность ставить больше задач обработки запросов в единицу времени, хотя сам CLR-пул более интенсивно используется. Так, не? И все же в таком случае потоки пула могу быстрее закончиться, не? ) И как контраргумент в пользу синхронной обработки: даже если поток пула будет выполнять долговременную IO-операцию, то в случае появления новых запросов с таким же успехом мы просто возьмем еще один поток из пула CLR для обработки, поскольку в этом случае пул не так интенсивно используется, и он там сто пудово будет. pS: надо будет прошерстить всю эту тему
0
|
||
| 18.11.2015, 09:31 | |
|
Помогаю со студенческими работами здесь
11
Так куда все таки внедрять EF DbContex (или репозитории)? в контроллеры или в модели представления?
Контроллеры С/С++ и контроллеры Контроллеры шины Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|