|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Если асинхронные вызовы все равно выполнаются в текущей нитке, в чем глубокий смысл? Работаю с несколькими чужими веб проектами где везде суют асинхронное исполнение. Накой? Все равно браузеру ждать ответа. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 21:32 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Чтобы не быть голословным, вот например такой метод: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И чё мы выиграли? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 21:42 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo Kobler, похоже по коду внутри идет работа с I/O. А ты напиши перформанс-тест для двух вариантов. Асинхронный. И обычный. И сравни. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 01:21 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo KoblerЕсли асинхронные вызовы все равно выполнаются в текущей нитке, в чем глубокий смысл? IO операции выполняются в так называемом "IO потоке" (условно), пока они там выполняются, поток освобождается и может выполнять другую работу, т.е. не простаивает, ожидая пока IO операция будет завершена, тем самым отнимая драгоценный ресурс у приложения. И нет, синхронный код асинхронного метода выполняется не в текущей нитке, а в первом свободном потоке (см. ConfigureAwait, чтобы этим управлять). Gobzo KoblerРаботаю с несколькими чужими веб проектами где везде суют асинхронное исполнение. Накой? Все равно браузеру ждать ответа. Мы уже давно перешли на асинхронную модель. Был опыт, когда существующее старенькое приложение под внезапно выросшими высокими нагрузками в качестве эксперимента переделали на асинхронную модель и получили колоссальный выигрыш по производительности, исчезли периодические DOS, без применения техник масштабирования (горизонтального и вертикального) и без хак-тюнинга. А «Все равно браузеру ждать ответа» это верно, быстрее работа с СУБД или файлами от этого не станет, но драгоценные ресурсы при этом экономятся. Т.е. другими словами, клиенты не ждут, когда освободится поток, который тупо ждёт когда там база данных раздуплится. Gobzo KoblerИ чё мы выиграли? В данном случае мы видим, что мы пишем в XmlWriter, но маленькими порциями, это не значит, что все эти операции обязательно будут I/O операциями, данные пишутся в буффер, когда буффер наполнится, он скидывается на диск, и только в этот момент происходит I/O операция, которую не хотелось бы ждать и блокировать поток. Проблема в том, что мы не знаем КОГДА этот буфер наполнится, а управлять буффером вручную не хотелось бы. Поэтому ВСЕ эти маленькие операции должны выполняться с помощью конструкций асинхронного вызова. Фишка в том, что ты не можешь в методе, который был вызван синхронно (т.е. без await), выполнить асинхронный вызов через await когда тебе вздумается, и чтобы это имело под собой обозначенный профит. Нет, не можешь. Поэтому ВЕСЬ код, который собирается выполнять I/O операции хоть где-то, должен быть async. Конечно, ты можешь в любой момент вернуться с одной из старых моделей для асинхронных вызовов, от чего как раз все уходят. На событиях, делегатах, специальных интерфейсах :) Модератор: Тема перенесена из форума "Программирование". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 01:46 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo Kobler, Код действительно некрасивый. Нужно делать асинронным сам объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 08:01 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Petro123Код действительно некрасивый. Нужно делать асинронным сам объект. Что некрасивого? Можно прокидывать делегат с синхронным кодом внутрь асинхронного, но нафига эти костыли? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 10:40 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
hVosttЧто некрасивого? На каждой строке писать await. Нужно без этого слова но асинхронно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 10:45 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
>Gobzo Kobler, вчера, 21:42 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1287138&msg=21241889] [21241889] > >И чё мы выиграли? В классе с Вашим примером могут существовать методы обработки событий, что дает возможность прервать работу метода Вашего примера, к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 10:53 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
ВМоисеевмогут И В синхронном коде можно прерывать метод. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 11:00 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Petro123Нужно без этого слова но асинхронно. код в студию ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 13:15 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
ВМоисеевВ классе с Вашим примером могут существовать методы обработки событий, что дает возможность прервать работу метода Вашего примера, к примеру. не могут, не передаётся CancellationToken ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 13:15 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
hVosttPetro123Нужно без этого слова но асинхронно. код в студию Он тот же без слов await в каждой строке. Сам класс xmlWriter внутри накапливает в буфер и другим потоком выполняет. Т.е. 15 строк пробегут мгновенно. Больше ничего не надо. Всё внутри xmlWriter. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 16:03 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Какую-такую "другую работу"? Обрабатывается HTTP запрос, ему нужен XML созданный обработчиками. Что еще он может "делать" пока создается XML по кусочкам? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 17:51 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo Kobler, В данном случае ты прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 18:24 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
[quot hVostt]Gobzo KoblerВ данном случае мы видим, что мы пишем в XmlWriter, но маленькими порциями, это не значит, что все эти операции обязательно будут I/O операциями, данные пишутся в буффер, когда буффер наполнится, он скидывается на диск. Не на диск, а в Response. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 19:03 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Petro123Он тот же без слов await в каждой строке. Сам класс xmlWriter внутри накапливает в буфер и другим потоком выполняет. Т.е. 15 строк пробегут мгновенно. Больше ничего не надо. Всё внутри xmlWriter. угу, вместо одного, ты два потока сожрёшь. ясно ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:09 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo KoblerКакую-такую "другую работу"? Обрабатывается HTTP запрос, ему нужен XML созданный обработчиками. Что еще он может "делать" пока создается XML по кусочкам? обрабатывать другие запросы, вот что делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:09 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo KoblerНе на диск, а в Response. запись в респонз тоже можно делать асинхронно, т.е. для того, чтобы скидывать данные из буфера в сеть поток не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:10 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
hVostt, ты хочешь сказать что все запросы обрабатываются одним потоком? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:15 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo KoblerhVostt, ты хочешь сказать что все запросы обрабатываются одним потоком? все запросы обрабатываются ограниченным набором потоков из пула потоков. основная задача, это заставить имеющиеся потоки выполнять работу, а не проводить время в ожидании IO операций, и уменьшать количество задействованных потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:20 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
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, все равно в моем примере будут полоть процессор и никакого выигрыша от асинхронности не будет. по моему все таки разрабам надо думать головой, а не тухесом и отличать ожидание ответа накопителя или сетевого адаптера от пересылки байтов из буфера в буфер. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:38 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
+под процессором следует понимать одно ядро! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 20:38 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
hVosttобрабатывать другие запросы, вот что делать. это забота другого уровня. Причём тут прикладной код? Веб сервер, если идёт запрос и нет свободного потока запускает новый). Ты тут со своим кодом причём? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 21:15 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
Gobzo Koblerа следовательно HttpRequest и XmlWriter, поддержанные "в заду" MemoryStream, все равно в моем примере будут полоть процессор и никакого выигрыша от асинхронности не будет. по моему все таки разрабам надо думать головой, а не тухесом и отличать ожидание ответа накопителя или сетевого адаптера от пересылки байтов из буфера в буфер. совершенно верно. Простота написания await в Net оглупляет народ. В Java поток создать посложнее, поэтому народ не пишет await направо и налево. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 21:18 |
|
Асинхронное программирование под .NET - в чем глубокий смысл?
|
|||
---|---|---|---|
#18+
>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? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2018, 01:03 |
|
|
start [/forum/topic.php?fid=20&fpage=33&tid=1399464]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 156ms |
0 / 0 |