powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Обработка многих запросов action одновременно (многопоточность)
17 сообщений из 17, страница 1 из 1
Обработка многих запросов action одновременно (многопоточность)
    #38713420
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Возник вопрос как организовать многопоточность для множества одновременных запросов к одному action, который тащит данные из базы и возвращает в представление. Конкретно, в отдельный поток надо помещать метод, который выполняется в action и возвращает данные, или сам action? Допустим 5000 запросов одновременно.
Но вроде выяснилось что запросы к приложению (сайту) обрабатываются очередью в пуле, в котором выполняется приложение. Очередь одна. Выходит, чтобы распаралелить запросы нужно распределить приложение на нескольких пулов одновременно, так что ли?
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713422
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то распределением потоков, запросов, пуллингом и т.п. будет заниматься фреймворк, об этом думать не требуется, по крайней мере на уровне запросов.

Будут выполняться одновременно (параллельно) несколько запросов (обусловленных ограничениями в настройках IIS), на каждый из них будет создан отдельный экземпляр контроллера. Остальные будут ждать в очереди.

Если action выполняется долго, можно создавать асинхронные методы контроллера, чтобы убрать выполняемую задачу из общего пула и дать среде обработать другие запросы. Но об этом, как я понимаю, речь пока не идет.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713425
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Не так. Очередь одна, а потоков, обрабатывающих запросы много (по 25 на ядро по умолчанию). Поэтому 5000 запросов не будут выполняться последовательно.

НО
1) Если ты используешь сессию, то запросы с одной сессией выполняются последовательно.
2) Ограничение на число подключений к SQL Server в пуле - 100, поэтому если все твои запросы упираются в базу, то ты начнешь со временем ловить эксепшены что нет свободных подключений/
3) Но еще до того, как ты упрешься в пул, ты упрешься в БД
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713426
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas2) Ограничение на число подключений к SQL Server в пуле - 100, поэтому если все твои запросы упираются в базу, то ты начнешь со временем ловить эксепшены что нет свободных подключений/а) число настраивается
б) по идее, запросы встанут в очередь и если только SQL не будет справляться, и очередь начнет расти, получишь эксепшн по таймауту подключения, а не по количеству свободных подключений (если я ничего не путаю)
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713440
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas1) Если ты используешь сессию, то запросы с одной сессией выполняются последовательно.кстати, можно пруф? лично я не только не вижу такого эффекта, но и считаю его глупым для реализации.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713465
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЕсли action выполняется долго, можно создавать асинхронные методы контроллера, чтобы убрать выполняемую задачу из общего пула и дать среде обработать другие запросы. Но об этом, как я понимаю, речь пока не идет.

Типа того?

Код: c#
1.
2.
3.
4.
5.
6.
7.
public async Task<ActionResult>  Index()
        {
          
            await GetFromBase(id);  

            return View();
        }
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713467
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisТипа того?да, типа того.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713472
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Progandjustas2) Ограничение на число подключений к SQL Server в пуле - 100, поэтому если все твои запросы упираются в базу, то ты начнешь со временем ловить эксепшены что нет свободных подключений/а) число настраивается
б) по идее, запросы встанут в очередь и если только SQL не будет справляться, и очередь начнет расти, получишь эксепшн по таймауту подключения, а не по количеству свободных подключений (если я ничего не путаю)
Не понял какая очередь?

1) если будет задействовано 100 подключений, то при попытке открыть 101-е код будет ждать освобождения, и может отвалится по таймауту пула. К таймауту подключения это не имеет отношения.
2) Если запросы упрутся в SQL, то начнут сыпаться эксепшены из-за request timeout, который по умолчанию 90сек.
3) А вот если увеличить таймаут, то уже можно упереться в лимит подключений, а если увеличить лимит подключений, то можо упереться в лимит очереди запросов в IIS. Но последнее на практике не встречалось.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713473
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Progandjustas1) Если ты используешь сессию, то запросы с одной сессией выполняются последовательно.кстати, можно пруф? лично я не только не вижу такого эффекта, но и считаю его глупым для реализации.

На самом деле все сложнее, но активная работа с сессией приводит к такому эффекту.
http://msdn.microsoft.com/en-us/library/aa479041.aspx#aspnetsessionstate_topic3 If a page request sets a reader lock, other concurrently processed requests in the same session cannot update the session state but are at least allowed to read. This means that when a session read-only request is being served, awaiting read-only requests are given higher priority than requests needing a full access. If a page request sets a writer lock on the session state, all other pages are blocked, regardless of whether they have to read or write. For example, if two frames attempt to write to Session, one of them has to wait until the other finishes.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713478
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если спать на потолке, то одеяло будет падатьgandjustas1) Если ты используешь сессию, то запросы с одной сессией выполняются последовательно.короче, ерунды нагородил
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713490
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа если спать на потолке, то одеяло будет падатьgandjustas1) Если ты используешь сессию, то запросы с одной сессией выполняются последовательно.короче, ерунды нагородил

А ты по ссылке прочитал? а то я не все что надо скопировал:
http://msdn.microsoft.com/en-us/library/aa479041.aspx#aspnetsessionstate_topic3 What if other pages attempt to concurrently access the session state? In that case, the current request might end up working on inconsistent data, or data that isn't up to date. Just to avoid this, the session state module implements a reader/writer locking mechanism and queues the access to state values. A page that has session-state write access will hold a writer lock on the session until the request terminates.

A page claims write access to the session state by setting the EnableSessionState attribute on the @Page directive to true . (This is the default setting.) A page, though, can also have read-only permissions on the session state, for example, when the EnableSessionState attribute is set to ReadOnly . In this case, the module will hold a reader lock on the session until the request for that page finishes. As a result, concurrent readings can occur.

If a page request sets a reader lock, other concurrently processed requests in the same session cannot update the session state but are at least allowed to read. This means that when a session read-only request is being served, awaiting read-only requests are given higher priority than requests needing a full access. If a page request sets a writer lock on the session state, all other pages are blocked, regardless of whether they have to read or write. For example, if two frames attempt to write to Session, one of them has to wait until the other finishes.


Короче первое же обращение к сессии тормозит все остальные запросы. А если поставить ReadOnly , то запросы на чтение могут идти параллельно, но первая же запись в сессию лочит все остальное.

Обрати внимание какой режим используется по умолчанию.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713500
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasА ты по ссылке прочитал?Wintellect
September 2003

Видимо, с тех пор что-то изменилось. Мне не удалось воспроизвести описанное.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713506
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProgandjustasА ты по ссылке прочитал?Wintellect
September 2003

Видимо, с тех пор что-то изменилось. Мне не удалось воспроизвести описанное.


http://msdn.microsoft.com/en-us/library/vstudio/ms178581(v=vs.100).aspx However, if two concurrent requests are made for the same session (by using the same SessionID value), the first request gets exclusive access to the session information. The second request executes only after the first request is finished. (The second session can also get access if the exclusive lock on the information is freed because the first request exceeds the lock time-out.)

Ты прочитай внимательно. Целостность данных сессии нельзя обеспечить если каждый запрос может туда писать в любое время.

Начиная с .NET4 есть возможность указывать какие ключи сессии твой хендрер будет трогать, уменьшая гранулярность блокировки. Но это только для кастомных хендлеров.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713508
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Приведи код, которым "не получилось"
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713515
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я пробовал внутри своего проекта, не в отдельном проекте. поэкспериментирую в отдельном.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713528
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял свою ошибку при тестировании, описанное воспроизводится, я был не прав.
...
Рейтинг: 0 / 0
Обработка многих запросов action одновременно (многопоточность)
    #38713610
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisОчередь одна. Выходит, чтобы распаралелить запросы нужно распределить приложение на нескольких пулов одновременно, так что ли?Нет, не так. Вот, прочти:

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Обработка многих запросов action одновременно (многопоточность)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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