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

Код: 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
07.03.2018, 01:21
    #39611574
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
Gobzo Kobler, похоже по коду внутри идет работа с I/O.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

все запросы обрабатываются ограниченным набором потоков из пула потоков. основная задача, это заставить имеющиеся потоки выполнять работу, а не проводить время в ожидании IO операций, и уменьшать количество задействованных потоков.
...
Рейтинг: 0 / 0
07.03.2018, 20:38
    #39612061
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
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
07.03.2018, 20:38
    #39612062
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
+под процессором следует понимать одно ядро!
...
Рейтинг: 0 / 0
07.03.2018, 21:15
    #39612067
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
hVosttобрабатывать другие запросы, вот что делать.
это забота другого уровня. Причём тут прикладной код?
Веб сервер, если идёт запрос и нет свободного потока запускает новый).
Ты тут со своим кодом причём?
...
Рейтинг: 0 / 0
07.03.2018, 21:18
    #39612069
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
Gobzo Koblerа следовательно HttpRequest и XmlWriter, поддержанные "в заду" MemoryStream, все равно в моем примере будут полоть процессор и никакого выигрыша от асинхронности не будет. по моему все таки разрабам надо думать головой, а не тухесом и отличать ожидание ответа накопителя или сетевого адаптера от пересылки байтов из буфера в буфер.
совершенно верно.
Простота написания await в Net оглупляет народ.
В Java поток создать посложнее, поэтому народ не пишет await направо и налево.
...
Рейтинг: 0 / 0
08.03.2018, 01:03
    #39612117
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное программирование под .NET - в чем глубокий смысл?
>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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное программирование под .NET - в чем глубокий смысл? / 25 сообщений из 83, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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