Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
Вот тут Асинхронные методы пишет, что: авторПри обращении пользователя к веб-ресурсу IIS выделяет поток из пула для обслуживания данного запроса. И пока данный поток не обработает предназначенный для него запрос, другие запросы он обрабатывать не может. Однако предположим, что метод контроллера в процессе обработки запроса должен выполнить запрос к другому ресурсу или к базе данных. Запрос к сетевому ресурсу или БД сам по себе может занять некоторое время. При синхронной обработке поток, обрабатывающий запрос, временно блокируется, пока сетевой ресурс или БД не возвратят нужные нам данные. И если обработка запроса блокируется очень долго, то IIS начинает задействовать для обслуживания других входящих запросов новые потоки. Однако есть ограничения на общее количество потоков. Когда количество потоков достигает предела, то вновь входящие запросы помещаются в очередь ожидания. Однако и тут есть ограничение на количество запросов в очереди. И когда это количество превышает предел, то IIS просто отклоняет все остальные запросы с помощью статусного кода 503 (Service Unavailable). При асинхронной обработке поток не ждет, пока БД вернет ему данные, а начинает обрабатывать запрос от другого пользователя. Правильно ли я понял? Есть сайт. Его открывают у себя в браузере пользователи. И например один из пользователь задал какую-то выборку данных (отчет) и что все остальные пользователи будут ждать пока отчет не обработается, до этих пор они не смогут просматривать содержимое сайта? Ну или исходя их этого: авторИ если обработка запроса блокируется очень долго, то IIS начинает задействовать для обслуживания других входящих запросов новые потоки. Будет ждать какое-то определённое время, при том ждать будут все?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 09:28 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
potkin. И например один из пользователь задал какую-то выборку данных (отчет) и что все остальные пользователи будут ждать пока отчет не обработаетсяВроде ж ясно написано... не будут, пока на всех хватает свободных потоков в пуле в пределах лимита ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 09:37 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro И какая тогда разница синхронного и асинхронного метода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 09:47 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
асинхронный метод НЕ будет занимать поток из пула, пока выполняется длительная операция. Грубо говоря, если у тебя ограничение пула - 100, и 100 пользователей одновременно запросят длительную операцию, то 101-й не сможет запросить даже короткую операцию - будет ждать. В случае асинхронного метода для длительной операции такого не будет. Поток отдаст выполнение задачи Task-у и сможет обслуживать следующие запросы других пользователей. Когда Task закончит, поток вернется к этому пользователю и отдаст ему запрошенные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 09:53 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro Понял, Спб! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 10:05 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
А Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 12:14 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
AntonariyА Task разве не тот же поток, только в профиль и в пальто? Каким путем асинхронность достигается?Он не входит в пул, обслуживающий соединения пользователей, поэтому не уменьшает доступную емкость пула ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 12:23 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
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 для того чтоб поток взял мимо пула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:06 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuхм а что есть отдельный пул для этого? можно ссылку на инфу?Ссылку дал ТС в начале топика. Все, что я сказал, это то же самое другими словами, но ТС это понял, результат достигнут )) Детали, как это работает там внутри, обсуждать не готов. Могу лишь сказать, что описание изложенного повторяется другими словами и в других учебниках и статьях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:23 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuи пул общий для всего стека .net на компе откуда дровишки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:25 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:55 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
А о какой версии IIS речь? А то ведь то, что вы тут обсуждаете, от версии зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 10:51 |
|
||
|
Асинхронные методы
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38987491&tid=1356411]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 308ms |

| 0 / 0 |
