|
0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 9
|
|
Смысл асинхроности в webapi03.08.2023, 20:34. Показов 1989. Ответов 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
|
|||
|
4694 / 2702 / 734
Регистрация: 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
|
|
|
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,811
|
||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|