powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное программирование под .NET - в чем глубокий смысл?
25 сообщений из 83, страница 1 из 4
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611516
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если асинхронные вызовы все равно выполнаются в текущей нитке, в чем глубокий смысл?
Работаю с несколькими чужими веб проектами где везде суют асинхронное исполнение. Накой? Все равно браузеру ждать ответа.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611520
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не быть голословным, вот например такой метод:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private static async Task WriteSimpleAttribute(XmlWriter xmlWriter, string name, string value)
{
  await xmlWriter.WriteStartElementAsync(null, "attribute", null);
  await xmlWriter.WriteAttributeStringAsync(null, "name", null, name);
  await xmlWriter.WriteStartElementAsync(null, "attributeValues", null);
  await xmlWriter.WriteStartElementAsync(null, "attributeValue", null);
  await xmlWriter.WriteElementStringAsync(null, "value", null, value);
  await xmlWriter.WriteEndElementAsync();
  await xmlWriter.WriteEndElementAsync();
  await xmlWriter.WriteEndElementAsync();
}


И чё мы выиграли?
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611574
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler, похоже по коду внутри идет работа с I/O.

А ты напиши перформанс-тест для двух вариантов. Асинхронный. И обычный. И сравни.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611576
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerЕсли асинхронные вызовы все равно выполнаются в текущей нитке, в чем глубокий смысл?

IO операции выполняются в так называемом "IO потоке" (условно), пока они там выполняются, поток освобождается и может выполнять другую работу, т.е. не простаивает, ожидая пока IO операция будет завершена, тем самым отнимая драгоценный ресурс у приложения.

И нет, синхронный код асинхронного метода выполняется не в текущей нитке, а в первом свободном потоке (см. ConfigureAwait, чтобы этим управлять).

Gobzo KoblerРаботаю с несколькими чужими веб проектами где везде суют асинхронное исполнение. Накой? Все равно браузеру ждать ответа.

Мы уже давно перешли на асинхронную модель. Был опыт, когда существующее старенькое приложение под внезапно выросшими высокими нагрузками в качестве эксперимента переделали на асинхронную модель и получили колоссальный выигрыш по производительности, исчезли периодические DOS, без применения техник масштабирования (горизонтального и вертикального) и без хак-тюнинга.

А «Все равно браузеру ждать ответа» это верно, быстрее работа с СУБД или файлами от этого не станет, но драгоценные ресурсы при этом экономятся. Т.е. другими словами, клиенты не ждут, когда освободится поток, который тупо ждёт когда там база данных раздуплится.

Gobzo KoblerИ чё мы выиграли?

В данном случае мы видим, что мы пишем в XmlWriter, но маленькими порциями, это не значит, что все эти операции обязательно будут I/O операциями, данные пишутся в буффер, когда буффер наполнится, он скидывается на диск, и только в этот момент происходит I/O операция, которую не хотелось бы ждать и блокировать поток. Проблема в том, что мы не знаем КОГДА этот буфер наполнится, а управлять буффером вручную не хотелось бы. Поэтому ВСЕ эти маленькие операции должны выполняться с помощью конструкций асинхронного вызова.

Фишка в том, что ты не можешь в методе, который был вызван синхронно (т.е. без await), выполнить асинхронный вызов через await когда тебе вздумается, и чтобы это имело под собой обозначенный профит. Нет, не можешь. Поэтому ВЕСЬ код, который собирается выполнять I/O операции хоть где-то, должен быть async. Конечно, ты можешь в любой момент вернуться с одной из старых моделей для асинхронных вызовов, от чего как раз все уходят. На событиях, делегатах, специальных интерфейсах :)

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611613
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler,
Код действительно некрасивый.
Нужно делать асинронным сам объект.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611670
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Код действительно некрасивый.
Нужно делать асинронным сам объект.

Что некрасивого? Можно прокидывать делегат с синхронным кодом внутрь асинхронного, но нафига эти костыли?
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЧто некрасивого?
На каждой строке писать await.
Нужно без этого слова но асинхронно.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611687
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Gobzo Kobler, вчера, 21:42 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1287138&msg=21241889] [21241889]
>
>И чё мы выиграли?
В классе с Вашим примером могут существовать методы обработки событий, что дает возможность прервать работу метода Вашего примера, к примеру.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевмогут
И В синхронном коде можно прерывать метод.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611786
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Нужно без этого слова но асинхронно.

код в студию
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611787
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевВ классе с Вашим примером могут существовать методы обработки событий, что дает возможность прервать работу метода Вашего примера, к примеру.

не могут, не передаётся CancellationToken
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611930
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123Нужно без этого слова но асинхронно.

код в студию
Он тот же без слов await в каждой строке.
Сам класс xmlWriter внутри накапливает в буфер и другим потоком выполняет.
Т.е. 15 строк пробегут мгновенно.
Больше ничего не надо. Всё внутри xmlWriter.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39611986
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какую-такую "другую работу"? Обрабатывается HTTP запрос, ему нужен XML созданный обработчиками. Что еще он может "делать" пока создается XML по кусочкам?
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612014
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler,
В данном случае ты прав.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612029
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot hVostt]Gobzo KoblerВ данном случае мы видим, что мы пишем в XmlWriter, но маленькими порциями, это не значит, что все эти операции обязательно будут I/O операциями, данные пишутся в буффер, когда буффер наполнится, он скидывается на диск.
Не на диск, а в Response.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612046
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Он тот же без слов await в каждой строке.
Сам класс xmlWriter внутри накапливает в буфер и другим потоком выполняет.
Т.е. 15 строк пробегут мгновенно.
Больше ничего не надо. Всё внутри xmlWriter.

угу, вместо одного, ты два потока сожрёшь. ясно
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612047
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerКакую-такую "другую работу"? Обрабатывается HTTP запрос, ему нужен XML созданный обработчиками. Что еще он может "делать" пока создается XML по кусочкам?

обрабатывать другие запросы, вот что делать.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612048
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerНе на диск, а в Response.

запись в респонз тоже можно делать асинхронно, т.е. для того, чтобы скидывать данные из буфера в сеть поток не нужен.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612052
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

ты хочешь сказать что все запросы обрабатываются одним потоком?
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612055
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerhVostt,

ты хочешь сказать что все запросы обрабатываются одним потоком?

все запросы обрабатываются ограниченным набором потоков из пула потоков. основная задача, это заставить имеющиеся потоки выполнять работу, а не проводить время в ожидании IO операций, и уменьшать количество задействованных потоков.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612061
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

понятно, все на подпорках.

https://msdn.microsoft.com/en-us/library/hh191443.aspx Async methods don't require multithreading because an async method doesn't run on its own thread.

а следовательно HttpRequest и XmlWriter, поддержанные "в заду" MemoryStream, все равно в моем примере будут полоть процессор и никакого выигрыша от асинхронности не будет. по моему все таки разрабам надо думать головой, а не тухесом и отличать ожидание ответа накопителя или сетевого адаптера от пересылки байтов из буфера в буфер.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612062
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+под процессором следует понимать одно ядро!
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612067
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttобрабатывать другие запросы, вот что делать.
это забота другого уровня. Причём тут прикладной код?
Веб сервер, если идёт запрос и нет свободного потока запускает новый).
Ты тут со своим кодом причём?
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612069
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Koblerа следовательно HttpRequest и XmlWriter, поддержанные "в заду" MemoryStream, все равно в моем примере будут полоть процессор и никакого выигрыша от асинхронности не будет. по моему все таки разрабам надо думать головой, а не тухесом и отличать ожидание ответа накопителя или сетевого адаптера от пересылки байтов из буфера в буфер.
совершенно верно.
Простота написания await в Net оглупляет народ.
В Java поток создать посложнее, поэтому народ не пишет await направо и налево.
...
Рейтинг: 0 / 0
Асинхронное программирование под .NET - в чем глубокий смысл?
    #39612117
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, вчера, 13:15 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1287138&msg=21243092] [21243092]
>не могут,...
Если ...async Task... есть метод UserControl, то Вы считаете, что нельзя удалить uc, вызвав Children.Remove(uc) в обработчике Click?
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 1 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное программирование под .NET - в чем глубокий смысл?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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