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

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

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

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

В случае асинхронного метода для длительной операции такого не будет. Поток отдаст выполнение задачи Task-у и сможет обслуживать следующие запросы других пользователей. Когда Task закончит, поток вернется к этому пользователю и отдаст ему запрошенные данные.
...
Рейтинг: 0 / 0
19.06.2015, 10:05
    #38987503
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
Shocker.Pro
Понял, Спб!
...
Рейтинг: 0 / 0
19.06.2015, 12:14
    #38987738
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
А Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?
...
Рейтинг: 0 / 0
19.06.2015, 12:23
    #38987753
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
AntonariyА Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?Он не входит в пул, обслуживающий соединения пользователей, поэтому не уменьшает доступную емкость пула
...
Рейтинг: 0 / 0
19.06.2015, 13:06
    #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
19.06.2015, 13:23
    #38987901
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
handmadeFromRuхм а что есть отдельный пул для этого? можно ссылку на инфу?Ссылку дал ТС в начале топика. Все, что я сказал, это то же самое другими словами, но ТС это понял, результат достигнут ))

Детали, как это работает там внутри, обсуждать не готов. Могу лишь сказать, что описание изложенного повторяется другими словами и в других учебниках и статьях.
...
Рейтинг: 0 / 0
19.06.2015, 13:25
    #38987905
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
handmadeFromRuи пул общий для всего стека .net на компе
откуда дровишки?
...
Рейтинг: 0 / 0
19.06.2015, 13:55
    #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
23.06.2015, 10:51
    #38990408
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы
А о какой версии IIS речь? А то ведь то, что вы тут обсуждаете, от версии зависит.
...
Рейтинг: 0 / 0
23.06.2015, 19:28
    #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
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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