|
0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 9
|
|
Смысл асинхроности в webapi03.08.2023, 20:34. Показов 2025. Ответов 32
Метки нет (Все метки)
Привет, простой вопрос в чем смысл асинхронности в .net web api , если и так на каждый запрос от клиента выделяется поток?
И если в этом потоке встречаем асинхронный код , то выделяется еще поток чтобы "отпустить" текущий? Получается бессмысленно меняем поток на другой поток?!
0
|
|
| 03.08.2023, 20:34 | |
|
Ответы с готовыми решениями:
32
WCF vs WebAPI PATCH в WebApi 2 Steam WebApi и C# |
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||
| 04.08.2023, 17:30 | |||
|
Добавлено через 6 минут А про смысл kolorotur и IamRain рассказали. Теперь хоть есть понимание, что в каких-то сценариях от асинхронности на сервере и в самом деле может быть польза.
0
|
|||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
||
| 04.08.2023, 17:42 | ||
|
Условно, мы работаем с вами в очной форме в одном офисе, и я знаю что для вас конфеты-леденцы - это топливо для работы. И вот условно ближе к обеду, я могу подойти и подзарядить вас: 1. Синхронно - не смотря на то, что вы находитесь в состоянии потока, и допиливаете какую-то сложную логику, вот вот закончите; но я не смотря на ваше состояние потока, дергаю вас за плечо, и говорю, kotelok!! - возьми конфету! Подзарядил, но вывел из состояния потока. Все испортил. 2. Асинхронно, просто мимо проходя кинул пару-тройку леденцов вам на стол. Не отвлекая вас от ваших дел. Внимание, вопрос: производительность какой системы будет выше?
1
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 04.08.2023, 17:47 | ||
|
В большинстве случаев ваша реализация сервиса будет работать в среде с IoC, т.е. обработкой запросов и той части, где принимается решение на создание нового потока будете управлять не вы, а веб-сервер, поверх которого вы пишете свои контроллеры (IIS, Kestrel и т.д.). Ваш код будет запускаться тогда, когда решение о создании нового потока или переиспользовании старого уже принято. Насколько мне известно, эти сервера предполагают, что будет использоваться асинхронность, потому создают ограниченное количество потоков на обработку запросов. В этом случае без дополнительного ковыряния конфигов этих сервисов вариант с потоками будет работать совсем плохо. Ну а чем ковыряться в документации и тестировать методом тыка, наверное проще прописать где нужно async и await.
1
|
||
|
|
||
| 04.08.2023, 18:17 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 9
|
|
| 04.08.2023, 19:46 [ТС] | |
|
Могу записать видео где я делаю Sleep и вызываю много раз, в дебаге вижу что каждый sleep будет в своём потоке с разными threadID
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 9
|
|
| 04.08.2023, 23:15 [ТС] | |
|
Wolfdp,
0
|
|
|
|
|
| 05.08.2023, 05:11 | |
|
Mastodon_dev, я подозреваю что подразумевалось "не создается новый, а берется из пула". Сервак держит набор заготовленных тредов, для обработки входящих реквестов. Насколько знаю, тоже самое происходит и с ассинхронным кодом
- пришел запрос, выгребли из пулла свободный треад - дошли скажем до запроса к БД, который асинхронный, ушел запрос - тред за ненадобностью возращаеться в пул - через N-милисекунд (ну или часов, тут как повезет) возращается ответ от БД. Из пулла опять выгребается свободный треад для формирования респонса клиента
0
|
|
|
14734 / 9508 / 1364
Регистрация: 21.01.2016
Сообщений: 35,879
|
||
| 05.08.2023, 07:39 | ||
|
0
|
||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 05.08.2023, 08:22 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Появилось непреодолимое желание
Для начала посмотрим что за собой тянет пул, который держит сервак (вместо того чтобы каждый раз создавать отдельный тред). Напишем примитивный web api, который сохраняет в статическую переменную привязанную к потоку некий GUID, и всё это дело отдает как ответ на реквест.
Теперь по перфомансу, берем "типичную" задачу: запрос, ждем 5 секунд, возвращаем некий результат. По сути типичная вычитка из БД (хотя 5с это конечно дофига). Ставим у клиента таймаут 10 сек (что вроде как двукратный запас) и пробуем запросить "одновременно" скажем 50 раз.
Результат этого безобразия.
Замечу что т.к. всё это крутилось на одном CPU, во-первых запросы шли не моментально, а на сколько успевал проц в конкуренции с серваком. Во-вторых, 50к запросов заходило не моментально, т.к. на клиентской части тоже есть пул (внезапно), который обрабатывает наши задачи, и что-то мне подсказывает что скорость добавления нового треда там сопоставим с теми же задержками, что и на серваке. Ложка дегтя: сделаем ситуацию для асинхронного кода чуть реалистичнее: задержка на выполнение какой-то не асинхронной задачи и пнем всего 50 запросов.
Проект на "потыкать лично" прилагается ниже
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||||||||||||||||||
| 05.08.2023, 15:04 | |||||||||||||||||||||||||||
![]()
Эмулируем 50к запросов, разбитых на 10к одновременных соединений, т.е. в среднем будет где-то 5 запросов с одного соединения:
1
|
|||||||||||||||||||||||||||
|
|
|
| 05.08.2023, 16:44 | |
|
kolorotur, увы, с бренчмарками плохо знаком, да и не особо хотелось завязываться на тайминги, так как по хорошему это нужно отключать все лишнее для чистоты эксперимента (в идеале еще и второй ноут задействовать). Да и изначально предполагал что код придеться сильно сложнее писать (особенно на серверной части), чтобы достичь наглядных просадок, но оказалось всё намного веселей.
Тут больше вопрос к Mastodon_dev, остались ли у него вопрлсы по "зачем асинхроность". А то примеры это хорошо, но их код тоже нужно разбирать.
0
|
|
| 05.08.2023, 16:44 | |
|
Отправка запроса Get к WebApi Отправка запроса Get к WebApi Вставка картинки в WebApi WebApi + Html + css WebAPI случается timeout Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|