Мне этот переходный момент в программировании ощущается некомфортно и тревожно именно потому, что я нахожусь в самой середине переходной эпохи между двумя парадигмами работы.
Я сформулировал для себя по другому. Мне страшно, что за то что мне нравилось в профессии больше не будут платить деньги, и теперь приходится переучиваться. Кто там говорил: "Найдите работу, которая вам нравится и вам не приведется работать ни дня"? Это мне получается теперь работать придется? Я еще не влез как следует в вайб-кодинг, так изредка прошу, чтобы оно сгенерировало мне или unit тесты или реально скучный бойлерплейт. Но этот процесс мне не нравится.
До 262144 итераций разница во времени минимальна, но на 1000000 итераций она уже составляет 38%!
А то что в таблице результатов все что меньше 1000000 выигрывает BadStruct как-то объясняется или мы просто считаем, что это равный результат, отличающийся не более чем на погрешность измерений?
Спасибо. Вот этот ответ, на самом деле, для меня много прояснил. В целом получается если я знаю, где у меня hot path, который над оптимизировать, я уже сразу могу расставлять точки и смотреть трассировки.
Я просто не понимаю как интерпретировать результаты семлпирования. По сути просто посмотреть на те функции, которые дольше всех выполняются, и прикинуть, должны ли они выполняться быстрее? А дальше уже инструментированием разбираться конкретнее, на что и в каких пропорциях тратится время?
А есть какой-то гайд по профилированию приложений (или это он и был)? Опишу кейс. У меня приложение - пример использования библиотеки, которую я делаю. Оно запускается, делает бизнес логику, завершается. На все около 1 секунды на моем железе. Там внутри установка подключения к серверу, формирование пакетов, шифрование, отправка, получение, дешифрование, парсинг пакетов, пакеты разные, отправляются и принимаются параллельно, основная логика в одном потоке, но есть еще парочка дополнительных. Как выбирать чем, что и как профилировать? Раньше, на прошлой работе, использовал tracy для гуи приложения. Мне в целом хватало просто пройтись по записанным функциям и посмотреть, что сколько занимает, потом добавить детализации и посмотреть где именно тратится время. Тут часто ошибался, с тем, что менял одновременно и код, и добавлял точки для сбора трейсов, получалось, что время увеличивалось, хотя ожидал, что оно уменьшится. Для меня это все еще самый очевидный подход, но он кажется трудоемким и сложно повторяемым.
а я правильно понял, что генератор тут это i / 0x8a010_fmt ? А свои генераторы можно/легко писать? Если мне надо сконкатенировать со строкой например вектор моих типов каких-то?
А какие проблемы если для них всех оно выглядит как TCP? Просто не шлет повторы и не ждет ACK. Сами ACK кстати можно отправлять, чтобы еще меньше палиться.
Главная проблема тормозов в классическом подходе «устойчивых» протоколов - они обертывают VPN-данные в TCP-соединение и мимикрируют под HTTPS. Выглядит это в итоге как обычный веб-трафик, но TCP добавляет проблем со своим обязательным подтверждением доставки пакетов. При таком подходе, при потере одного пакета встаёт вся очередь пакетов, что приводит к классическому head-of-line blocking, жутко замедляя соединение.
А если уж VPN под что-то мимикрирует. То можно и под TCP мимикрировать? То есть сделать протокол, который в заголовках выглядит как TCP, но ведет себя как UDP?
Да, будет косвенный вызов через vtable. Да, это наносекунды.
Но в приведенном примере еще и аллокация ведь, а это точно больше чем вызов через vtable. Но вообще мысль то правильная. Избегать мономорфизации если оно прям сильно не нужно.
И более того - дома резервнй канал через LTE они тоже доступны, даже в режимах ограничений! А вот на даче в соседнем регионе такой же микротик с LTE (есть версия, что провайдеры дают поблажки стационарным точккам которые относятся к модемам по IMEI и не мигрируют между БС) и там уже все печально.
Как сейчас принято говорить, то что у вас что-то работает, это не ваши заслуги, а их недоработки.
Так понятно, что забугор будут блочить. А по РФ то они должны работать, их ведь и компании всякие используют. Или когда белые списки включают, то и все остальные протоколы блочат?
Для ТСПУ это выглядит как обычный обмен данными между двумя серверами, который фильтруется гораздо слабее, чем прямой «заход» юзера на иностранный хостинг
А можно тогда у себя на роутере использовать что-то древнее, а не то что не блокируют? Например l2tp? А уже с моста пусть выходит vless.
Я сформулировал для себя по другому.
Мне страшно, что за то что мне нравилось в профессии больше не будут платить деньги, и теперь приходится переучиваться.
Кто там говорил: "Найдите работу, которая вам нравится и вам не приведется работать ни дня"?
Это мне получается теперь работать придется?
Я еще не влез как следует в вайб-кодинг, так изредка прошу, чтобы оно сгенерировало мне или unit тесты или реально скучный бойлерплейт. Но этот процесс мне не нравится.
Пережили уже, или еще переживаете?
К чему пришли?
не сказано, что это погрешность. По графику не видно, а в таблице видно, что
BadStructстабильно выигрывает до 1000000.А то что в таблице результатов все что меньше
1000000выигрываетBadStructкак-то объясняется или мы просто считаем, что это равный результат, отличающийся не более чем на погрешность измерений?Спасибо. Вот этот ответ, на самом деле, для меня много прояснил.
В целом получается если я знаю, где у меня hot path, который над оптимизировать, я уже сразу могу расставлять точки и смотреть трассировки.
Я просто не понимаю как интерпретировать результаты семлпирования. По сути просто посмотреть на те функции, которые дольше всех выполняются, и прикинуть, должны ли они выполняться быстрее?
А дальше уже инструментированием разбираться конкретнее, на что и в каких пропорциях тратится время?
https://github.com/VerySleepy/verysleepy - что-то для windows. Для linux есть perf, который делает то же самое?
А есть какой-то гайд по профилированию приложений (или это он и был)?
Опишу кейс. У меня приложение - пример использования библиотеки, которую я делаю. Оно запускается, делает бизнес логику, завершается. На все около 1 секунды на моем железе. Там внутри установка подключения к серверу, формирование пакетов, шифрование, отправка, получение, дешифрование, парсинг пакетов, пакеты разные, отправляются и принимаются параллельно, основная логика в одном потоке, но есть еще парочка дополнительных. Как выбирать чем, что и как профилировать?
Раньше, на прошлой работе, использовал tracy для гуи приложения. Мне в целом хватало просто пройтись по записанным функциям и посмотреть, что сколько занимает, потом добавить детализации и посмотреть где именно тратится время. Тут часто ошибался, с тем, что менял одновременно и код, и добавлял точки для сбора трейсов, получалось, что время увеличивалось, хотя ожидал, что оно уменьшится.
Для меня это все еще самый очевидный подход, но он кажется трудоемким и сложно повторяемым.
ну а вообще со встройкой есть смысл пробовать, Может дальше пойдут такие вычисления, что нет смысла даже пытаться?
А если у меня встройка AMD на ноутбуке, есть смысл пробовать что-то по этому циклу?
Ну в таких условиях удаленка изначально не применима, а значит нечего и отменять.
а я правильно понял, что генератор тут это i / 0x8a010_fmt ? А свои генераторы можно/легко писать? Если мне надо сконкатенировать со строкой например вектор моих типов каких-то?
А какие проблемы если для них всех оно выглядит как TCP?
Просто не шлет повторы и не ждет ACK. Сами ACK кстати можно отправлять, чтобы еще меньше палиться.
У меня вопрос.
А если уж VPN под что-то мимикрирует. То можно и под TCP мимикрировать? То есть сделать протокол, который в заголовках выглядит как TCP, но ведет себя как UDP?
Но в приведенном примере еще и аллокация ведь, а это точно больше чем вызов через vtable.
Но вообще мысль то правильная.
Избегать мономорфизации если оно прям сильно не нужно.
Но они же не в белых списках.
Как сейчас принято говорить, то что у вас что-то работает, это не ваши заслуги, а их недоработки.
Так понятно, что забугор будут блочить. А по РФ то они должны работать, их ведь и компании всякие используют. Или когда белые списки включают, то и все остальные протоколы блочат?
А можно тогда у себя на роутере использовать что-то древнее, а не то что не блокируют? Например l2tp? А уже с моста пусть выходит vless.
Вообще звучит здорово. Я бы даже сказал благородно.
А как перетянуть аудиторию из сегодняшних соцсетей?
Я сюда как раз пришел, потому что искал про perf в интернетах
а разве клавиатура должна появится не в драйверах? Или это только для теста прерываний?