Miroslav
RWMutex не решит?
Может и решит, кстати) Так как можно одновременно читать выглядит не так страшно. P.S. А это настоящие мьютексы? Не барьеры памяти?
Alexander
попробуй нечто вроде такого: slice := []int64{1, 2, 3} atomic.AddInt64(&slice[1], 3) не тестил. новые элементы и прочие операции над слайсом только уже мьютексом защищать
Miroslav
попробуй нечто вроде такого: slice := []int64{1, 2, 3} atomic.AddInt64(&slice[1], 3) не тестил. новые элементы и прочие операции над слайсом только уже мьютексом защищать
Мм, тут слайс 64-битный. Вижу, можно 32-битный сделать. В пакете atomic есть и под него. А со слайсом байтиками как обращаться? (туплю, наверно)
Alexander
обычно области разбивают так, что каждый поток со своей работает. если это возможно тут
Георгий
всем добрый день. Интересен вопрос по работе gin. Сервер выполняет запросы синхронно и последовательно в один поток или нет (например как в ноде, в один поток асинхронно)?
Alexander
добрый день. В go другой подход: а именно порождение горутины на каждый запрос. Горутина для конечного юзера может восприниматься как поток, но обслуживание и порождение оной гораздо дешевле, и считай обходиться по цене асинхронщины, хотя код для конечного юзера в рамкаъ горутины последовательный.
Alexander
Будут задействованы все ядра при создании соответствующей нагрузки, если ты не ограничишь. Но, допустим если сервер будет ограничен на одно ядро, в плане использования процессора это будет не хуже модели с асинхронной обработкой на одном потоке.
Alexander
Если нужно объяснение почему, то спрашивай.
Георгий
Можно начать с изучения net.http, джин поверх него работает
я читал что есть fasthttp and fiber, типа супер пупер быстрые. они тоже поверх стандартной библиотеки?
Alexander
я читал что есть fasthttp and fiber, типа супер пупер быстрые. они тоже поверх стандартной библиотеки?
fasthttp не поверх net.http. Быстрая смотря в чем: для конечного пользователя быстрее не будет особо. Просто оно памяти и проца в 2 раза меньше ест на обработку запроса со стороны http стека. С другой стороны, менее удобный API имхо и меньшая проработанность. Когда в нагрузке на проц работа http сервера ощутимая часть, то fasthttp рулит. Про fiber не знаю.
Miroslav
Спасибо)
Null
Опыт работы с Golang: путь проб и ошибок https://nuancesprog.ru/p/10711/ @Golang_google
Gazimagomed
Произойдет ли “паника” при получении программой сигнала SIGTERM?
Alexander
тебе нужно отлавливать сигнал?
🔥
fasthttp не поверх net.http. Быстрая смотря в чем: для конечного пользователя быстрее не будет особо. Просто оно памяти и проца в 2 раза меньше ест на обработку запроса со стороны http стека. С другой стороны, менее удобный API имхо и меньшая проработанность. Когда в нагрузке на проц работа http сервера ощутимая часть, то fasthttp рулит. Про fiber не знаю.
Что то ты напутал) fast http выйгрывает именно во времени обработки запроса т.к. использует преаллоцированную память, но как раз за счёт этого и того как работает гц в го памяти он зачастую ест больше чем любой другой http фреймворк причем в разы.
Alexander
Alexander
больше не тестил, мне именно лэтэнси важна была
Alexander
конечно, если попарсить еще GET и тело запроса, можно больше получить информации
Alexander
насчет гц, вроде бы как раз гц меньше должен работать в разы, так как аллокаций меньше
Alexander
потести, если не веришь
🔥
ну я опять же именно тестил на хэллоуворде, лэтэнси была на 10% меньше. в один поток клиентом долбил. net.http 100%+ проца, fasthttp 40-50% и памяти более чем в 2 раза меньше ел
У меня в продакшене после того как перевели API написанное на джин в Фаст хттп скорость обработки приросла на процентов 50% так как большие приветы ответы были
Alexander
хттпшный клиент тоже интересный. долбил net.http шный хэллоуворлд. на моей машине под виндой было 40к+ рпс с обычным клиентом и небольшой процент ошибок, fasthttp клиент 110к и без ошибок. потоки с клиентами потихоньку увеличивал
🔥
Ещё зависит от того как ты запускаешь листенер
🔥
Если использовать реюз порт то там тоже прирост должен быть
Alexander
но он конечно у них всей функциональностью не обладает, и в бою (полутипичный веб краулер) себя лучше не показал
Alexander
м?
Alexander
Ещё зависит от того как ты запускаешь листенер
Alexander
Если использовать реюз порт то там тоже прирост должен быть
🔥
?
Alexander
У меня в продакшене после того как перевели API написанное на джин в Фаст хттп скорость обработки приросла на процентов 50% так как большие приветы ответы были
а что в плане контент энкодинга было в одном и в другом случае? но опять же я замерял именно на хэллоуворлде, может с большим пэйлоадом картина другая
🔥
Без сжатия
Alexander
то есть в обоих случаях не было контент энкодинга со стороны веб сервера?
Alexander
я имею в виду именно контент энкодинг именно в рамках хттп протокола, а не в ручную сжатие и расжатие. для уточнения
Alexander
Если использовать реюз порт то там тоже прирост должен быть
реюз в смысле, что один и тот же порт для http сервера и для dial'a http клиента?
Ilya
Друзья, нужны Middle Golang разрабы, есть такие?) Стучитесь в ЛС, есть вакансия на вилку 320
🔥
хттпшный клиент тоже интересный. долбил net.http шный хэллоуворлд. на моей машине под виндой было 40к+ рпс с обычным клиентом и небольшой процент ошибок, fasthttp клиент 110к и без ошибок. потоки с клиентами потихоньку увеличивал
Ты же понимаешь что если в реальности будет такое количество рпс то у тебя сервак 99 процентов времени будет тратить на сокеты и обработку пакетов в ядре)
🔥
Почитай что такое c10k и c10m
Maxim
Почитай что такое c10k и c10m
so_reuseport+epoll как раз это решает, эта проблема давно уже решается. можно посмотреть, например как nginx решил ее в свое время
🔥
посмотри: https://github.com/smallnest/1m-go-tcp-server
Тут же про c1m, но никак не про c10m. Такие задачи решаются насколько я знаю только избавлением от обработки пакетов в ядре с помощью того же dpdk
Maxim
Тут же про c1m, но никак не про c10m. Такие задачи решаются насколько я знаю только избавлением от обработки пакетов в ядре с помощью того же dpdk
Сорь, не заметил про c10m. DPDK решает конечно, но пока в проде не встречал. чаще горизонтально просто ростят и балансировку делаеют.
Null
Структурирование вашего приложения Golang: плоская структура против многоуровневой архитектуры https://dev-gang.ru/article/strukturirovanie-vashego-prilozhenija-golang-ploskaja-struktura-protiv-mnogourovnevoi-arhitektury-0ddxmdrjws/ @Golang_google
Matvei
Структурирование вашего приложения Golang: плоская структура против многоуровневой архитектуры https://dev-gang.ru/article/strukturirovanie-vashego-prilozhenija-golang-ploskaja-struktura-protiv-mnogourovnevoi-arhitektury-0ddxmdrjws/ @Golang_google
Мне не нравится повторение имени пакета в названии структуры, если правильно помню в Effective Go говорится о том, что имена структур должны читаться вместе с именем пакета. Типа не controllers.NoteController, а controller.Note, либо note.Controller
Μαριούπολη
Ребят , go build / go install, есть ли принципиальная разница, кроме места хранения исполняемых файлов ?
Matvei
А интерфейс контролерячий общий как назовешь?
Не совсем понимаю, зачем он нужен, но если понадобится, то, скорее всего, что-то типа web.Controller, app.Controller
Black
any golang coder here i want make one script if any can i will pay
Vivek
Go: вы должны знать это, прежде чем использовать Defer https://dev-gang.ru/article/go-vy-dolzhny-znat-eto-prezhde-czem-ispolzovat-defer-5vfvem6a0o/ @Golang_google
каким будет прото-сообщение для нижеприведенного json: { "env": "testing", "data": [ { "key": "133", "value":"Test"}], "tags": ["env","test"] }
Null
OpenTelemetry и Sentry - недооцененные инструменты трассировки распределенных систем на Golang https://nuancesprog.ru/p/13923/ @Golang_google
Maks
Помните тип писал про то что наследование имеет свои преимущества перед агрегацией. Что без наследования жить нельзя. Я короче тогда не допер как его пример реализовать с датчиками. А сегодня меня осенило))) И еще раз убедился в том, что наследование не нужно в принципе)
Maks
оч давно было) Это был сиплюсплюсник)
Maks
Мне друг один вопрос задал: Как без наследования быть с плоскими структурами не дублируя код. Например(он шарпист) есть структура А плоская которая приходит в виде жсон и сериализуется в структуру. Есть стуктура Б которая имеет точно тот же набор полей и еще несколько полей. Без наследования придется либо делать вложенную структуру, либо дублировать все поля в другую плоскую структуру.
Maks
ура, я поймал какой то глюк в винде 11))) Редкий случай для меня)
Maks
Maks
Maks
Не ну это
А это не глюк
Не ну это
это норма)))))
Maks
Ну у меня обычно всё ок. Это реально какой то баг. Это же бетка еще.
Не ну это
Я уже привык, что в любой непонятной ситуации вылезает магазин мелкомягких
Maks
Нашел фикс, это именно в 11 винде в сборках есть такой баг в некоторых
Maks
Возможно))) Timachee или как то так)
Maks
звали
Maks
я не прогаю на ней по работе. только для себя. На го вполне себе, ничего не мешает. Базы я только в докере разворачиваю, тут с этим проблема нет, так как wsl2 работает более менее адекватно.
Maks
По работе только на линуксе
Alexander
а куда ты денешься?
Alexander
ну можно же вложенную правда использовать. чего нет?
NN
Зачем она нужна если структура Б справляется
Alexander
надо структуру С будет, например
Alexander
потом интерфейс придумать, который Б и С реализуют - вот тебе и наследование почти
NN
Надо почитать матчасть, по идее всё должно быть предусмотрено