powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы
13 сообщений из 13, страница 1 из 1
Асинхронные методы
    #38987471
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут Асинхронные методы пишет, что:
авторПри обращении пользователя к веб-ресурсу IIS выделяет поток из пула для обслуживания данного запроса. И пока данный поток не обработает предназначенный для него запрос, другие запросы он обрабатывать не может.
Однако предположим, что метод контроллера в процессе обработки запроса должен выполнить запрос к другому ресурсу или к базе данных. Запрос к сетевому ресурсу или БД сам по себе может занять некоторое время. При синхронной обработке поток, обрабатывающий запрос, временно блокируется, пока сетевой ресурс или БД не возвратят нужные нам данные.
И если обработка запроса блокируется очень долго, то IIS начинает задействовать для обслуживания других входящих запросов новые потоки. Однако есть ограничения на общее количество потоков. Когда количество потоков достигает предела, то вновь входящие запросы помещаются в очередь ожидания. Однако и тут есть ограничение на количество запросов в очереди. И когда это количество превышает предел, то IIS просто отклоняет все остальные запросы с помощью статусного кода 503 (Service Unavailable).
При асинхронной обработке поток не ждет, пока БД вернет ему данные, а начинает обрабатывать запрос от другого пользователя.

Правильно ли я понял?
Есть сайт. Его открывают у себя в браузере пользователи. И например один из пользователь задал какую-то выборку данных (отчет) и что все остальные пользователи будут ждать пока отчет не обработается, до этих пор они не смогут просматривать содержимое сайта?
Ну или исходя их этого:
авторИ если обработка запроса блокируется очень долго, то IIS начинает задействовать для обслуживания других входящих запросов новые потоки.

Будет ждать какое-то определённое время, при том ждать будут все?!
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987485
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin. И например один из пользователь задал какую-то выборку данных (отчет) и что все остальные пользователи будут ждать пока отчет не обработаетсяВроде ж ясно написано...
не будут, пока на всех хватает свободных потоков в пуле в пределах лимита
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987491
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
И какая тогда разница синхронного и асинхронного метода?
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987493
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
асинхронный метод НЕ будет занимать поток из пула, пока выполняется длительная операция.

Грубо говоря, если у тебя ограничение пула - 100, и 100 пользователей одновременно запросят длительную операцию, то 101-й не сможет запросить даже короткую операцию - будет ждать.

В случае асинхронного метода для длительной операции такого не будет. Поток отдаст выполнение задачи Task-у и сможет обслуживать следующие запросы других пользователей. Когда Task закончит, поток вернется к этому пользователю и отдаст ему запрошенные данные.
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987503
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Понял, Спб!
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987738
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987753
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?Он не входит в пул, обслуживающий соединения пользователей, поэтому не уменьшает доступную емкость пула
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987859
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProОн не входит в пул, обслуживающий соединения пользователей, поэтому не уменьшает доступную емкость пула
хм а что есть отдельный пул для этого? можно ссылку на инфу? насколько я знаю есть настройка в иис на кол-во реквестов но это не связано с пулстеком никак. и пул общий для всего стека .net на компе.

п.с.
асп берет потоки именно из пула для рекветов, а вот про асинхроность тут тонкий момент даж если у вас действие вроде как async то кто мешает внутри потока его залочить на долго тем же просчетом мутарной операции по бд, вот тут подробно
http://stackoverflow.com/questions/8743067/do-asynchronous-operations-in-asp-net-mvc-use-a-thread-from-threadpool-on-net-4
если задача реально долгая то лучше создавать потоки мимо пула и пул будет юзать эффективнее для быстрых задач

п.с. к примеру Task.Factory.StartNew берет поток из пула и рекомендуют помечать TaskCreationOptions.LongRunning для того чтоб поток взял мимо пула.
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987901
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuхм а что есть отдельный пул для этого? можно ссылку на инфу?Ссылку дал ТС в начале топика. Все, что я сказал, это то же самое другими словами, но ТС это понял, результат достигнут ))

Детали, как это работает там внутри, обсуждать не готов. Могу лишь сказать, что описание изложенного повторяется другими словами и в других учебниках и статьях.
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987905
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuи пул общий для всего стека .net на компе
откуда дровишки?
...
Рейтинг: 0 / 0
Асинхронные методы
    #38987998
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
ну я прочел по ссылке но я не увидел инфы отдельному пуле
[quot Изопропил[][
Он не входит в пул, обслуживающий соединения пользователей


ИзопропилhandmadeFromRuи пул общий для всего стека .net на компе
откуда дровишки?
а тут я погорячился на appdomain
https://msdn.microsoft.com/ru-ru/library/system.threading.threadpool(v=vs.110).aspx
http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx
...
Рейтинг: 0 / 0
Асинхронные методы
    #38990408
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А о какой версии IIS речь? А то ведь то, что вы тут обсуждаете, от версии зависит.
...
Рейтинг: 0 / 0
Асинхронные методы
    #38991027
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin,
AntonariyА Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?
В Task нужно различать CPU-bound и I/O-bound.

Достигается через асинхронные порты завершения.

Обычный поток как работает:
Делает свою работу (CPU-bound). Встречает команду считать файл. Дает команду его открыть WinApi (I/O-bound). Висиииииит и ждет пока его считают. Та же ситуация с веб/wcf вызовом.
Итого, одновременно в системе может крутится ну штук 8 потоков (на 4х ядрах с гипертредингом) предположим. Причем большую часть времени они могут простаивать (ждут когда файл считается с диска или веб запрос). Все входящие запросы обламываются. Сервис не доступен.

Как работают асинхронные порты завершения:
Поток делает свою работу(CPU-bound). Встречает команду асинхронно считать файл / веб запрос (I/O-bound). Делает асинхронный вызов. При этому создается Task который будет выполнен как Continuation для данной асинхронной операции.
Сам поток на этом освобождается, возвращается в пул, где его тут же можно взять для выполнения других задач.
В это время жесткий диск / сетевая карта делает свое дело. После того как заканчивают, через IRP сообщают пулу потоков, что работа завершена. Пул достает свободный поток и тот продолжает работать с результатом считывания файла-веб запроса.
Итого, одновременно система может обрабатывать сотни запросов одновременно. Загрузка процессора на максимуме, т.к.
длительные операции чтения файлов не занимают потоки.

у пула потоков имеется два вида тредов. Для CPU-bound и для I/O-bound
ThreadPool.SetMaxThreads
ThreadPool.SetMinThreads
int workerThreads,
int completionPortThreads

30 минутное выступления Евгения Агафонова конкретно про это (веб и асинхронные запрос)
https://www.techdays.ru/videos/7667.html

2 книги очень подробно про асинхронность:
http://www.amazon.com/Multithreading-5-0-Cookbook-Eugene-Agafonov/dp/1849697647
http://www.amazon.com/Concurrency-C-Cookbook-Stephen-Cleary/dp/1449367569/ref=pd_sim_14_1?ie=UTF8&refRID=1H8TEV3X2EF307B4A5T7

вот блог Стивена Клири. Гуру в асинхронности. У него полно статей с разбором всех аспектов асинхронности. Можно задавать вопросы в коментах к блогу, отвечает оперативно.
http://blog.stephencleary.com/

еще у Рихтера досконально разобрано про взаимную работу асинхронные портов, пул и IRP.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]