powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как проверять ускорение от многопоточности ?
25 сообщений из 31, страница 1 из 2
Как проверять ускорение от многопоточности ?
    #38761376
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Интересует такой вопрос - как убедится, что алгоритм, написанный с async/await и Таск'ами действительно быстрее, чем синхронный.
Есть ли какой-то обучающий материал по инструментарию, который позволит увидеть в графиках и прочем, как ведет себя алгоритм и т.д.
Крайней желательно, чтобы инструментарий был бесплатным.
Я знаю, что в студии есть, вроде бы, графики перфоманса, но нужно разобраться как их понимать, в применении к многопоточности.

Знаете ли какой-то обучающий материал по этой теме ? Статьи может быть ?

Хочу по чаще применять async-awayt. Но, без графиков и конеректных цифр может выйти так, что программа стала даже медленней ! Нужно видеть результать и уметь его анализировать.

Подскажите плиз.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761475
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственная причина по которой асинхронные задачи могут быть быстрее синхронных - лучшая загрузка процессора. Поэтому в вашем случае проверить очень просто:
1) Написали синхронный алгоритм, посмотрели в Диспетчере задач загрузку CPU.
2) Написали асинхронный алгоритм, еще раз посмотрели.

Более того, вы должны понимать, что async/await - это просто синтаксический сахар, который не дает никакой асинхронности из коробки. async/await действительно становится асинхронным только в том случае, если последний вызов в цепочке является истинной асинхронной операцией (например, вызов операции на асинхронном сокете, отправка какой-то задачи в тред пул, и т.д.).
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761812
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЕдинственная причина по которой асинхронные задачи могут быть быстрее синхронных - лучшая загрузка процессора. Поэтому в вашем случае проверить очень просто:
1) Написали синхронный алгоритм, посмотрели в Диспетчере задач загрузку CPU.
2) Написали асинхронный алгоритм, еще раз посмотрели.


Да уж, мастер-класс бенчмаркинга :) Мера скорости решения задачи - тоже по загрузке проца?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761823
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы измерил время выполнения синхронной операции и в Task.ContinueWIth - асинхронной, и сделал выводы.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761899
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisДа уж, мастер-класс бенчмаркинга :) Мера скорости решения задачи - тоже по загрузке проца?То есть вы, господин трепло, во-первых, не понимаете чем вызвано ускорение при асинхронных операциях, а во-вторых не отличаете микробенчмарки от макробенчмарков. А зачем тогда пишете здесь и советы даете?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761952
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvТо есть вы, господин трепло

Что там с кодом-то, кстати? Покажешь?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38761997
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЕдинственная причина по которой асинхронные задачи могут быть быстрее синхронных - лучшая загрузка процессора.
нет это в корне не так, это не единственная и даже не основная
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762010
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Awaiterкак убедится, что алгоритм, написанный с async/await и Таск'ами действительно быстрее, чем синхронный.
А с чего вы взяли, что код "с async/await и Таск'ами" будет всегда быстрее? Отнюдь. Я бы даже сказал так - если есть возможность обойтись без этого, нужно ей пользоваться. Зачем чрезмерно усложнять код?

Плюсы от такого когда только в случае, когда ваш алгоритм работает с медленными устройствами, или долго ожидает ответа.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762016
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,
Что ж, с удовольствием послушаю вашу версию.

П.С.: только убедитесь перед ответом, что вы понимаете разницу между ускорением, то есть уменьшением времени выполнения операции, от отсутствия ожидания, когда задача выполняется столько же времени, но вы просто не ждете ее окончания.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762082
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
async/await - синтаксический сахар.
Task - последовательность действий(задача), которую можно запустить асинхронно(в отдельном потоке) и которой можно управлять.
Сам по себе запуск перенос одной задачи из GUI в отдельный поток, не ускорит выполнения задачи, но позволит создать более отзывчивый интерфейс.
Прирост в производительности можно получить выполняя несколько задач одновременно.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762111
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЕдинственная причина по которой асинхронные задачи могут быть быстрее синхронных - лучшая загрузка процессора. Ты так ничего и не понял про экономию на ожидающий потоках. В ужасе читай про I/O Completion Ports .
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762206
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КcdtyjvЕдинственная причина по которой асинхронные задачи могут быть быстрее синхронных - лучшая загрузка процессора. Ты так ничего и не понял про экономию на ожидающий потоках. В ужасе читай про I/O Completion Ports .О, еще один. Ну давайте, расскажите сколько же составляет эта экономия.
Мы все в свое время оттестировали в том числе и подход с SocketAsyncEventArgs вдоль и поперек на реальной 10-гигабитной сетке. И я скажу вам, что асинхронный сокет не выигрывал ни в одном сценарии. Самая быстрая модель - это обычный блокирующий сокет без всяких ухищрений. Если потоков (читай - соединений) становится уж слишком много, то надо переключаться на неблокирующий сокет с селектором. Так работает подавляющее большинство современных высокопроизводительных серверов. Все. Асинхронный сокет - это гомно на палочке.

В общем, как я понимаю, вы целостно вообще не умеете рассуждать на тему перфоманса. То вам лишний поток с 1Мб стэка это трагедия, то вам IO-порты панацеей являются. Это называется "слышал звон, да не знаю, где он".
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762228
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvИ я скажу вам, что асинхронный сокет не выигрывал ни в одном сценарии
А какие именно сценарии вы тестировали?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762230
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЕсли потоков (читай - соединений) становится уж слишком много, то надо переключаться на неблокирующий сокет с селектором. Так работает подавляющее большинство современных высокопроизводительных серверов. Все. Асинхронный сокет - это гомно на палочке
Код, демонстрирующий это, тоже пропиетарный?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762371
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так чего, кто нибудь знает про инструментарий, который мог бы наглядно показать разницу в синхронном-асинхронном коде ? :)

Просто, иначе, написание асинхронного кода - весьма рискованно. Мало того, что усложняет код, но и выгода не ясна...
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762386
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инструментарий называется микрохронометраж. Берёшь класс Stopwatch в руки и замеряешь то что тебе нужно и как тебе нужно.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762387
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AwaiterПросто, иначе, написание асинхронного кода - весьма рискованно. Мало того, что усложняет код , но и выгода не ясна ...
Ну так и не пиши... те. Ъ!
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762401
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИнструментарий называется микрохронометраж. Берёшь класс Stopwatch в руки и замеряешь то что тебе нужно и как тебе нужно.

Это не дело. Нужно видеть схему перед глазами. Нечто, похожее на план запроса SQL. Без плана запроса, оптимизация запросов - магия :)
Так вот и с TPL. Нужно бы (очень бы хотелось) видеть четко графики того, что есть. Иначе написание многопоточного кода - это некое шаманство. Причем разработчик может думать о том, что код ускорится по одной причине, а на самом деле он ускорился из-за другого, но без графиков не будет понятно что именно произошло... Магия :)

Просто хочется четкого подхода... понимания.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762410
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AwaiterskyANAИнструментарий называется микрохронометраж. Берёшь класс Stopwatch в руки и замеряешь то что тебе нужно и как тебе нужно.

Это не дело. Нужно видеть схему перед глазами. Нечто, похожее на план запроса SQL. Без плана запроса, оптимизация запросов - магия :)
Так вот и с TPL. Нужно бы (очень бы хотелось) видеть четко графики того, что есть. Иначе написание многопоточного кода - это некое шаманство. Причем разработчик может думать о том, что код ускорится по одной причине, а на самом деле он ускорился из-за другого, но без графиков не будет понятно что именно произошло... Магия :)

Просто хочется четкого подхода... понимания.Так берите полученные значения и рисуйте с них графики.
Ну или можете книжку почитать: Оптимизация приложений на платформе .Net
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762416
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AwaiterИначе написание многопоточного кода - это некое шаманство
В общем то так и есть. Есть общие правила камлания, которые призывают духов производительности. Но всегда есть внешние обстоятельства, которые а) нужно учитывать б) могут неожиданно меняться. Например, в это время случайно дифрагментация запустилась, или какой-то процесс процессор сожрал, например, Касперский. Как считать то будете?

А микробенчмарки для многопоточных/асинхронных приложений сделать вообще затруднительно. Они вообще зависят от вашего алгоритма. Так что будьте любезны указать, какой именно алгоритм вы собираетесь асинхронизировать. А потом только под него тесты можно писать.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762450
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Awaiter Причем разработчик может думать о том, что код ускорится по одной причине, а на самом деле он ускорился из-за другого, но без графиков не будет понятно что именно произошло... Магия :)


Уже говорили - ускорения может и не быть. Если есть задачи, которые должны выполняться тихо и не заметно, не мешая юзеру - кидай в асинхрон. Если длинную задачу можно разбить на параллельные куски - кидай в асинхрон. Завтра, когда на десктопах будет по 80 ядер в процах, все будет кидаться в асинхрон
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762481
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisУже говорили - ускорения может и не быть. Если есть задачи, которые должны выполняться тихо и не заметно, не мешая юзеру - кидай в асинхрон. Если длинную задачу можно разбить на параллельные куски - кидай в асинхрон. Завтра, когда на десктопах будет по 80 ядер в процах, все будет кидаться в асинхрон
Я например получаю заметный, почти линейный рост производительности при загрузке данных в СУБД, увеличивая количество потоков до некоторого уровня, определяемого эмперически. Проверять легко - смотрим sql запросом, сколько строк добавилось в секунду.
Правда ораклячие админы начинают звонить и требуют прекратить, поэтому приходиться делать это ночью.
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762507
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЯ например получаю заметный, почти линейный рост производительности при загрузке данных в СУБД, увеличивая количество потоков до некоторого уровня, определяемого эмперически.


Тут тоже - при загруженном серваке одна производительность, ночью - другая

Правда ораклячие админы начинают звонить и требуют прекратить, поэтому приходиться делать это ночью.

Простые юзеры начинают испытывать проблемы из-за многопоточности твоей, или что?
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762512
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris
Тут тоже - при загруженном серваке одна производительность, ночью - другая

Думал сделать обратную связь, загружена БД - уменьшаем || и наоборот.
Pallaris
Простые юзеры начинают испытывать проблемы из-за многопоточности твоей, или что?
Видимо не только простые юзеры, но и мирные москвичи :)
...
Рейтинг: 0 / 0
Как проверять ускорение от многопоточности ?
    #38762557
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Awaiter[Просто хочется четкого подхода... понимания.Попробую максимально просто. У любой асинхронности есть всего навсего два варианта использования:
1) Если надо не ждать результата. Например, мне надо поклеить обои. Руки у меня по этой части из задницы, и я думаю, что у меня (ядро 1) это займет 2 дня. Но тут я решаю взять и попросить своего кореша (ядро 2), который это делает ничем не лучше меня. В итоге, как ни крути на саму задачу все равно уйдет два дня. Но в первом случае я сам это делаю (синхронно), и пока я этим занят, я не могут сделать ничего более. А во втором случае я попросил Васю сделать это за меня, а сам пошел заниматься чем-то другим.
Это типичный паттерн в UI, когда юзер плыкает на кнопку, которая строит охреневший отчет. Если вы будете строить его синхронно - то заблокируете UI на все время его построения, и у юзера начнет нервно подергиваться глаз. А если вы это сделаете асинхрнонно, то пока отчет строится, юзер сможет заняться чем-то другим.
Ускорения нет, просто меняется flow программы.
2) Если надо именно ускорить работу чего-либо, как правило - некоего вычислительного алгоритма. В моем примере это означает, что я позову не одного Васю, а, скажем, 4х. Один будет клеить обои на кухне, второй в детской, и т.д.. И в итоге на все-провсе уйдет на 2 дня, а (2 / 4 + обязательные накладные расходы) ~ 0.7 дня. Почитайте про закон Амдала .
Как правило, такие задачи решаются через подход map-reduce - когда вы сначала бьете большую задачу на маленькие части, которые стараетесь выполнять максимально параллельно. А потом вы собираете результаты, и как-то агрегируете их. Второй подход - событийный. В нем оперируют потоками неких событий. Пример - фреймворк Storm (вбейте в гугле "twitter storm streaming"), разработанный в недрах Твиттера.
Эти подходы именно что ускоряют работу алгоритмов. Вернее сказать - пытаются ускорить. На самом деле, далеко не всегда это возможно и оправдано. Но это уже другой разговор.

Так вы про какую асинхронность спрашивали - про первую или про вторую?
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как проверять ускорение от многопоточности ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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