Evgeny
почему?
потому что без пруфов утверждать что это дорого такое себе
Aleks
потому что без пруфов утверждать что это дорого такое себе
Оно по логике должно замедлять. В плюсах компиляция с try catch до 30% замедления дает. Как я понимаю, тут немного похожий механизм, чтоб оно исполнилось в любом случае.
Evgeny
ну вот бенчмарков нет, по крайней мере здесь не представили. но вот в каких то версиях над производительностью defer работали и вроде как оно по стоимости не отличается от обычного вызова
Evgeny
за исключением некоторых случаев, типа девер в цикле
Evgeny
1.13 This release improves performance of most uses of defer by 30%. 1.14 This release improves the performance of most uses of defer to incur almost zero overhead compared to calling the deferred function directly. As a result, defer can now be used in performance-critical code without overhead concerns.
Michael
в плюсах разматывание стека исключения тоже не дешёвое занятие поэтому команды бывают договариваются не использовать их
Michael
1.13 This release improves performance of most uses of defer by 30%. 1.14 This release improves the performance of most uses of defer to incur almost zero overhead compared to calling the deferred function directly. As a result, defer can now be used in performance-critical code without overhead concerns.
ответ на ваш вопрос в вашей же цитате дефёр от природы затратен выражаясь вашим языком если вы его будете абьюзить то вскоре сами будете листать статьи на Хабре а что так медленно работает то что начальные реализации дефёра были через попу так вот об этом честно и пишут что пофиксили но согласно формулировке это может быть не точно но авторы надеются на таки да
Michael
если у вас вызов одного дефёра и сразу выход из функции так никакого эффекта вы бы не заметили и на его кривых первых верясиях
Michael
в общем случае авторы говорят что при разумном подходе тратами на дефёр можно пренебречь
Michael
в качестве пруфов смотрите спеку языка
Evgeny
не надо отсылать в доку... приведите уже пруфы или или свой пример реального кейса где дефер был причиной плохой производительности
Michael
для бенчей вопрос остался открытым что вы хотите бренчить? медленный дефёр? пример на коленке аж легко… тот же дефёр в цикле который есть в ваших цитатах проспать можно аж бигом но есть способы написания кода где и такое вас не будет волновать
Michael
не надо отсылать в доку... приведите уже пруфы или или свой пример реального кейса где дефер был причиной плохой производительности
ну раз такие умные чтобы доки читать - идите код пишите, на каком нибудь ревью кода с вас точно угарнут
Michael
ничего личного, тольк Го
Evgeny
ну раз такие умные чтобы доки читать - идите код пишите, на каком нибудь ревью кода с вас точно угарнут
Если вдруг мой код завернут, например, по причине defer mutex.Unlock(), то у меня будет повод подискутировать с ревьюером. Если же я на ревью увижу mutex.Unlock() перед каждым return, у меня будет вопрос к автору на основании чего он решил так сделать?
Vadik
к чему это все? у дефера есть овер тайм и он сколько то там миллисекнд, зачем это обсасывать?
Vadik
нано секунд
да, сорян
Michael
Предположу в этом случае медленный defеr не самая страшная проблема в этом коде
его там скорее всего не будет заметно вообще как и не было заметно его кривых версий и до этого
Emin Zalaev
Тем временем io к базе 2 секунды, а разрабы спорят использовать ли дефер ради перфоманса в пару мс…
Michael
Если вдруг мой код завернут, например, по причине defer mutex.Unlock(), то у меня будет повод подискутировать с ревьюером. Если же я на ревью увижу mutex.Unlock() перед каждым return, у меня будет вопрос к автору на основании чего он решил так сделать?
про то что в последнем абзаце так делают и в стандартной библиотеке и делают лок анлок сразу главное чтобы автор отдавал отчёт зачем он так сделал и без док комента такое вообще не пропускать
Michael
Тем временем io к базе 2 секунды, а разрабы спорят использовать ли дефер ради перфоманса в пару мс…
это утверждение верно для крудов и обычным положи да выйди из базы
Michael
достаточно много задач где ио оч в приоритете
Michael
и нет бд
Emin Zalaev
это утверждение верно для крудов и обычным положи да выйди из базы
Насколько у вас должен быть медленный код, что вам придется оптимизировать defer. Мне кажется до defer там куча мест где нужно оптимизировать
Evgeny
да в исходниках го такого много, но есть вероятность что большинство этих оптимизаций с тек версиях неактуальны...
Michael
т.е. для 90% веб-приложений?)
ну я понял про что вы, и я бы не назвал их веб приложениями, но для массы утверждение верно
Evgeny
но даже без оптимизаций в 1.14 я бы не стал отказываться от defer unlock... такой проще понимать и поддерживать
Michael
Насколько у вас должен быть медленный код, что вам придется оптимизировать defer. Мне кажется до defer там куча мест где нужно оптимизировать
у меня задача не искать медленный код была, а ускорить то что было то что раньше могло неделю числа считать, сейчас работает за считанные часы на данных в террабайты
Michael
Ускорение ты с дефера начинаешь?)
использование дефёра это хороший кандидат на проверить сразу если есть вопросы к перфомансу
Michael
лично я начинаю с истории в гите
Emin Zalaev
как же это смешно читать
Evgeny
как же это смешно читать
не то чтобы смешно но слишком категорично
Emin Zalaev
слабые разрабы, миша бы их реджекнул на ревью
Michael
90% веб приложений не могут ошибаться 🤣
Emin Zalaev
надо им ишшью накидать "гошка медлинна работаит!!11!б аптимизируйти"
Michael
слабые разрабы, миша бы их реджекнул на ревью
о да давайте пруфы где я такое говорил 😎🤣
Emin Zalaev
не важно пруфоф не будет,первым делом мы проверяем дефер на перформанс
Emin Zalaev
времени мало нужно все деферы проверить
A
если деферы тормозят код, то ваше приложение слишком крутое для го
Michael
ну вот) может за одно и копирование локов проверите
Emin Zalaev
разрабам с бородой можно доверять
Michael
с бородой и в свитере самое то
Evgeny
поиск в гугл показал, что в 1.14 стоимость defer уменьшилась с 30-40ns до единиц ns вот еще статья попалась https://www.sobyte.net/post/2022-01/go-defer-principle/, глянул по диагонали, объясняется как оно внутри работает и в чем суть оптимизаций/ там же ограничения описаны до сих пор не вижу смысла кидаться на дефер аки бык на красную тряпку
Michael
времени мало нужно все деферы проверить
если времени нет, то надо танцевать, чтобы было канонично сам дефёр проверять не имеет смысла, он такой какой есть
Егор
Простите, не могу понять, тут спор о том, что деферы лучше не использовать ?
Axc
Простите, не могу понять, тут спор о том, что деферы лучше не использовать ?
В статье утверждается, что если хотите быстро, то да, не нужно. На что резонно заметили, что это всё про Go 7 версий назад
Evgeny
прежде всего это про преждевременную оптимизацию
Michael
В статье утверждается, что если хотите быстро, то да, не нужно. На что резонно заметили, что это всё про Go 7 версий назад
для не читавших но осуждающих приведу цитату из статьи для ясности Лучше избегать использования defer в цикле. defer приводит к увеличению стека, а стек очищается только после завершения функции; к тому же, это может привести к не очень очевидным ошибкам.
Michael
нужное подсветил
Axc
нужное подсветил
Спасибо. Правда не читал. В таком виде — признаю.
Evgeny
а есть кейсы реальной необходимости defer в цикле?
Michael
кто-то может захотеть слепить что-то вроде детерминированного деструктора и обернуть то всё анонимной функцией
Michael
а зачем оно кому такое надо это отдельный вопрос
Evgeny
ну то есть опять из разряда - доктор, когда я делаю вот так, мне больно
Michael
что тут скажешь жизнь - боль
Evgeny
прочитал статью, ощущение что статья ради статьи
Michael
всегда есть повод дополнить материал
Evgeny
для кого?
Evgeny
в статье ценности для пользователей меньше чем вреда. думал это корп блог, отус тот же подобным низкокачественным контентом страдает для привлечения внимания, но нет
Evgeny
а хотя да - "... крупнейший сайт для программистов"
Evgeny
кликбейт
Michael
ну да ну да зато это не мешает не читать и обсосать
Michael
или вы просто такие злые из-за того что вас туда на работу не взяли или на хабре забанили)
Null
#вакансия #vacancy #backend #go #golang #remote #удалённо Вакансия: Golang разработчик ЗП: от 200-300+тыс. руб. на руки (оформление по ТК РФ, либо ИП/СЗ) Формат работы и занятость: Удалённо, фуллтайм Локация: РФ, РБ Всем привет!🔥 Я Милена, рекрутер аккредитованной IT-компании 2UP. Мы находимся в поиске Golang разработчика для работы над новым продуктивити сервисом крупной технологической корпорации. Код пишется с нуля совместно с существующей группой разработчиков. 💫Задачи команды💫: — Разработка Go-сервиса с высокой нагрузкой согласно бизнес-требованиям; — Написание автотестов; — Развертывание сервиса в существующем кластере k8s. ❇️Ожидаем от специалиста❇️: — Опыт коммерческой разработки на Go - от 3 лет; — Опыт разработки сетевых, серверных, многопоточных приложений; — Опыт работы с БД; Будет плюсом: — Хорошее знание Linux, терминала и вспомогательных утилит (grep, awk); — Владение любым скриптовым языком (Python/Lua); — Опыт работы с высокой нагрузкой; — Понимание kubernetes; ⭐Мы предлагаем⭐: — Официальное оформление (есть возможность выбрать комфортный вариант для себя); — Возможности для профессионального и карьерного роста; — Расширенный соцпакет: ДМС, компенсация спорта, оплачиваемое обучение, компенсация на обустройство рабочего места; — Возможность участвовать в конференциях, митапах, обучающих курсах; — Работу с командой, где ваше мнение слышат и ценят, где дают обратную связь, поддержку, поле для реализации идей и ежедневную дозу юмора. Буду рада ответить на все интересующие вопросы 🧑‍💻 📩Контакты для связи📩: @milamtt
Michael
если у вас вопрос к полноте материала, то это в редакторский отдел хабра вам если вы всё знаете из материала, так только радоваться надо что вы всё знаете