Roman
чем сейчас модно управалять зависимостями в go? dep? govend?
Oleh
я думаю, что самое адекватное на данный момент это dep
Viacheslav!
Да я сам по себе-без тимлида)
Мерль
Да я сам по себе-без тимлида)
Тогда стоит попробоватьvgo, имхо Он всё равно станет основным инструментом, а экспериментировать лучше на пет проджектах
Viacheslav!
Создал gopkg.toml и теперь dep ensure не пискнул)
Viacheslav!
Осталось теперь что бы это завелось)
Roman
Осталось теперь что бы это завелось)
1. Сканирует проект и создает vendor.yml : govend -v -l 2. Если надо развернуть : копируете код и сохраненный vendor.yml, далее govend -v и все.... помоему проще....https://github.com/govend/govend
Viacheslav!
Спс
Roman
ну а так ... дело вкуса ... есть коллеги которым нравится dep
Aleksandr
только dep - он production ready. Для себя и для будущего можно vgo попробовать. Все остальное можно не рассматривать
Roman
почему нет?
d
А что по поводу godep?
d
Это ведь другая тулза?
Roman
dep, is an official experiment for the dependency tool. It is currently being implemented, in pre-alpha state and should be used with caution as "Lots of functionality is knowingly missing or broken"
Aleksandr
dep, is an official experiment for the dependency tool. It is currently being implemented, in pre-alpha state and should be used with caution as "Lots of functionality is knowingly missing or broken"
обсуждали полгода назад, что этой надписи чуть ли не год. в то время как тулза прошлым летом стала стабильной
Roman
Ок...
vld
Всем, привет! Вот такое задание: есть слайс с обьектами из бд далее в цикле мы переверяем на несколько условий каждый елемент, если все ок, то добавляем этот елемент в новый слайс. вопрос: как мы можем эту проверку распаралелить?
🏁Александр
а то призрачный гонщик придет и пожрет вашу душу
vld
@ruelephant @zelenin спасибо =)
🏁Александр
vld
кстати, @zelenin это не твои либы я видел в yii2?)
vld
ник похож
Aleksandr
🏁Александр
палево! 🙂
vld
мне они помогли в свое время, так что спасибо =)
🏁Александр
спасибо за идею, надо завести новый профиль на гитхабе 🙂
Anonymous
Нормальная тема писать игровой сервер на го?
Anonymous
Кто нибудь делал?))
Николай
А почему бы нет 🙂
Petr
Нормальная тема писать игровой сервер на го?
Никто тут не спрашивал и вот опять
Slava
смотря что за сервер
Slava
и какие требуются гарантии
Anonymous
Ну допустим шутер
Anonymous
Заюзаю udp + protobuf
Slava
ну по идее должно быть пофигу
Slava
на задержки сборщика
Alexander μήδομαι [в отпуске]
Я на это обычно ссылку на этот доклад даю: https://www.usenix.org/conference/srecon17asia/program/presentation/sibiryov
Очень интересный доклад. На вопрос "а как работает сборщик в Go?" дан ответ "в продакшене Убера сборщик сжирает 75% времени процессора на фоновое сканирование указателей" (при размере кучи 96ГБ). Как с этим бороться: радикально уменьшать количество указателей в структурах данных.
🏁Александр
а как?
🏁Александр
любая фабрика - указатель
🏁Александр
более того
🏁Александр
хочешь корректные нулы в json - в структуре пили указатели
Slava
двухлетней давности =)
Alexander μήδομαι [в отпуске]
а как?
1) заменять указатели дескрипторами; пример из доклада: использовать uintptr и кастовать его в *T при необходимости; утверждается, что в стандартной библиотеке Go такое часто делают; 2) минимизировать количество копий указателей; чтобы сборщик не удалил объект, достаточно сохранять всего 1 указатель на него; остальные указатели по возможности заменить на слабые uintptr; в идеале хранить 1 указатель на слайс однотипных объектов, не хранить указатели на индивидуальные ячейки слайса, вместо них хранить индексы или uintptr; 3) хранить максимум данных в специальных областях памяти, несканируемых сборщиком; например, в sync.Pool или в кастомном аллокаторе написанном кривыми добрыми руками (в докладе есть пример); при этом можно хранить указатели на объекты в этой области памяти, gc не будет по ним следовать вообще (кастомный вариант) или будет следовать по ним с большей эффективностью (вариант sync.Pool), т.к. область памяти специальная и сборщик про это знает.
Kirill
ну по идее должно быть пофигу
Смотря что гоняется через сервер. Иногда во время игры задержки gc недопустимы
Alexander μήδομαι [в отпуске]
двухлетней давности =)
Май 2017. Доклад подготовлен по более старому опыту работы с Go, разумеется. Кстати, в докладе Андрей показывает статистику, в которой паузы gc занимают ~5 мс, а в release notes 1.8 (август 2016) хвастают: "Garbage collection pauses should be significantly shorter than they were in Go 1.7, usually under 100 microseconds and often as low as 10 microseconds." Непонятно чему верить. Есть более свежие данные?
Daniel
1) заменять указатели дескрипторами; пример из доклада: использовать uintptr и кастовать его в *T при необходимости; утверждается, что в стандартной библиотеке Go такое часто делают; 2) минимизировать количество копий указателей; чтобы сборщик не удалил объект, достаточно сохранять всего 1 указатель на него; остальные указатели по возможности заменить на слабые uintptr; в идеале хранить 1 указатель на слайс однотипных объектов, не хранить указатели на индивидуальные ячейки слайса, вместо них хранить индексы или uintptr; 3) хранить максимум данных в специальных областях памяти, несканируемых сборщиком; например, в sync.Pool или в кастомном аллокаторе написанном кривыми добрыми руками (в докладе есть пример); при этом можно хранить указатели на объекты в этой области памяти, gc не будет по ним следовать вообще (кастомный вариант) или будет следовать по ним с большей эффективностью (вариант sync.Pool), т.к. область памяти специальная и сборщик про это знает.
треш, угар и _содомия_
Andrey
Я помню, что это была тактика, делать короткие паузы, и неважно, достаточно этого было или нет... По итогу конечно наступала большая пауза, но остальные были предсказуемы.
Andrey
В алибабе на Яве сделали, что а вообще мусор не собирается, условно до наступления ночи...
Daniel
на самом деле, единственная годная стратегия борьбы с мусоросборщиком - производить поменьше мусора
Zloy-Dobry
/report
Vladimir
1) заменять указатели дескрипторами; пример из доклада: использовать uintptr и кастовать его в *T при необходимости; утверждается, что в стандартной библиотеке Go такое часто делают; 2) минимизировать количество копий указателей; чтобы сборщик не удалил объект, достаточно сохранять всего 1 указатель на него; остальные указатели по возможности заменить на слабые uintptr; в идеале хранить 1 указатель на слайс однотипных объектов, не хранить указатели на индивидуальные ячейки слайса, вместо них хранить индексы или uintptr; 3) хранить максимум данных в специальных областях памяти, несканируемых сборщиком; например, в sync.Pool или в кастомном аллокаторе написанном кривыми добрыми руками (в докладе есть пример); при этом можно хранить указатели на объекты в этой области памяти, gc не будет по ним следовать вообще (кастомный вариант) или будет следовать по ним с большей эффективностью (вариант sync.Pool), т.к. область памяти специальная и сборщик про это знает.
Sync.pool имеет хуки на старт работы Гц и сбрасывает все неиспользуемое сам :)
Мерль
1) заменять указатели дескрипторами; пример из доклада: использовать uintptr и кастовать его в *T при необходимости; утверждается, что в стандартной библиотеке Go такое часто делают; 2) минимизировать количество копий указателей; чтобы сборщик не удалил объект, достаточно сохранять всего 1 указатель на него; остальные указатели по возможности заменить на слабые uintptr; в идеале хранить 1 указатель на слайс однотипных объектов, не хранить указатели на индивидуальные ячейки слайса, вместо них хранить индексы или uintptr; 3) хранить максимум данных в специальных областях памяти, несканируемых сборщиком; например, в sync.Pool или в кастомном аллокаторе написанном кривыми добрыми руками (в докладе есть пример); при этом можно хранить указатели на объекты в этой области памяти, gc не будет по ним следовать вообще (кастомный вариант) или будет следовать по ним с большей эффективностью (вариант sync.Pool), т.к. область памяти специальная и сборщик про это знает.
Не хранить указатели, а максимально использовать структуры по значению?
Vladimir
треш, угар и _содомия_
Ну а как иначе в языке где нет альтернативы сборщику мусора? Можно переписывать узкие места на каком нибудь расте как в дропбоксе делают, можно написать свой аллокатор как в убере
Vladimir
Первое дороже
Vladimir
Особенно, если нельзя прям просто оторвать это узкое место в отдельный проект
Alexander μήδομαι [в отпуске]
Согласен. Сжирать 75% ядер в продакшен-кластере на "бег на месте" это как-то слишком. Надеюсь, это поведение улучшат.
Alexander μήδομαι [в отпуске]
а где это 75% на бег по кругу?
См. выше ссылку на доклад из Убера.
Andrey
Я не знаю ГО, но по-любому в языке механизмы для управления памятью... Не зря же они тащат совместимость с С.
Aliaksandr
Очень интересный доклад. На вопрос "а как работает сборщик в Go?" дан ответ "в продакшене Убера сборщик сжирает 75% времени процессора на фоновое сканирование указателей" (при размере кучи 96ГБ). Как с этим бороться: радикально уменьшать количество указателей в структурах данных.
Думал, почему убер так тормозит и садит батарейку в телефоне? Оказывается, они не умеют писать программы и не знали, что оверзед в любом full scan gc пропорционален количеству указателей на объекты. Написали на го инмемори сторейдж на указателях и хотят, чтобы он быстро работал на стогиговом зипе с миллиардом указателей :) Бракоделы!!!
kås
Компилируют на клиентах
kås
Убер то? Ок
Aliaksandr
еще и запускают серверную часть на абонентских устройствах! раз батарейка садится
на абонентском устройстве программа на java, где тоже есть gc. Если они не могут нормальный сервер написать, то что уж говорить о клиенте. Небось тестируют свое поделие на последних версиях смартфонов, где оно кое-как шевелится. Лучше бы потестили на смартфонах пятилетней давности - узнали бы много нового про свой тормозной код
Aliaksandr
и заодно бы увеличили количество довольных пользователей, т.к. последние версии смартфонов есть лишь у небольшого количества их клиентов. Остальные мучаются с тормозами и высадкой батарейки за полчаса
kås
Aliaksandr
на смартфоне :)
kås
А вообще такая критика доставляет. Не нравится - не пользуйся. Есть решение - напиши им письмо. Я в Азии живу и тут grab отжал рынок. Убер вообще норм был по сравнению
Aliaksandr
кстати, именно год назад, когда вышел доклад, сервера убера больше всего тормозили, из-за чего обновления от такси приходили с запаздыванием в пять минут либо вообще переставали приходить. Тогда в 90% случаев приходилось созваниваться с таксистом, чтобы узнать, где он тебя ждет, т.к. в приложении его координаты не обновлялись
kås
Grab хоть и топят за go но сам продукт и клиент не удобный