Daniel
\o
Roman
type SimpleGraph struct { mutex sync.RWMutex adjacencyList map[interface{}]map[interface{}]struct{} v, e int }
Roman
красотень
саша
K P A C U B O
Daniel
это ты где нашел?
aadz
и в чем проблема?
Да я вот задумался и уже не уверен. Ассемблерный код смотреть надо, короче. Но, в любом случае, там константа как-то не выглядела так, что она должна быть глобальной
Daniel
это другое
Daniel
пенальти на константах я что-то не наблюдал ни разу
aadz
пенальти на константах я что-то не наблюдал ни разу
Да, может быть это define, по сути :) Говорю же, не проверл
Daniel
он и есть
aadz
он и есть
если так, то пофиг, где оно определено. defne он и есть define
L
Ребят, вот ловлю в fasthttp вот такую строанную ошибку: > error when serving connection "/tmp/my.sock"<->"@": write unix /tmp/my.sock->@: write: broken pipe перед прложением стоит nginx как реверс прокси
L
приложение начинает опять кушать 10 гигов и высирать такие ошибки
Daniel
1. нужен ли вам там nginx
L
нужен для ssl
Daniel
а просто перейти на эллиптические кривые?
L
еще он для балансинга между инстансами на ноде
Daniel
RSA в go, действительно, вдвое медленнее, чем в openssl
Daniel
но с EC, вроде, этих проблем нет
Daniel
2. 10 гигнов - это надо смотреть, что у вас не освобождается
Daniel
мы интенсивно юзаем UDS, и у нас нет с ним проблем
Daniel
аправда, мы не юзаем fasthttp
L
аправда, мы не юзаем fasthttp
стандартный net? сколько может на ядро req/sec?
L
2. 10 гигнов - это надо смотреть, что у вас не освобождается
я таки сетую на fasthttp, потому как инстансы рядом кушают на порядок меньше и не выплевывают такие ошибки
Daniel
стандартный net? сколько может на ядро req/sec?
я не помню уже. упереться именно в него не удавалось
Daniel
упираемся мы в гошечке обычно в json
L
упираемся мы в гошечке обычно в json
такая же ситуация. но у меня много клиентов стучатся и главное что очень много уникальных, т.е. какой-нибудь кипалайв не очлень спасает
саша
Кстати, а что там по обратной совместимости в Go2?
саша
Ведь после дженериков придётся всю стдлиб переписать
Daniel
нет никакого go2
L
я не помню уже. упереться именно в него не удавалось
ну на приложение/сервер сколько держит примерно?
Daniel
боьше, чем мне было надо
саша
нет никакого go2
есть черновики
L
боьше, чем мне было надо
у сменя сейчас 16 инстансов и на каждом 1-3k req/sec. и когда я делал на net, его не хватало
саша
> Go 1 and Go 2 code must be able to interoperate in programs with ease. Наес. То есть обратную совместимость сломают, но оставят какую-то интероперабельность. Ну чотко.
aadz
он и есть
Да, судя по всему, так и есть. По крайней мере, целочисленная константа выглядит как просто define в итоге
Vladimir
Чуваки, вы обсуждение шкуру неутвержденного драфта
aadz
rand.Seed достаточно вызвавть один раз. И константы лучше поближе определять, так как глобальные лежат далековато
А еще всегда убирай все лишнее из цикла! var land landscape там точно не нужно, можешь перед циклом объявить, ты в любом случае ему значение присвоишь на каждой итерации https://play.golang.org/p/2cGwo-jy1IK
L
да ладно.
по крайней мере соотношение req-sec/cpu было явно выше
L
@onokonem а ткните мну ссылкой по этим вашим эллиптическим кривым плиз
Zver
Да, судя по всему, так и есть. По крайней мере, целочисленная константа выглядит как просто define в итоге
Целочисленная константа может вообще нигде не храниться, точнее память специально под нее не выделяться, просто данные будут засунуты в команду.
aadz
да
Aleksandr
у меня есть структура с n полями, сериализуемая в json. Мне нужно ее маршалить в json вида {"@type": "myType", ...other fields...} то есть инжектить на стадии маршалинга поле @type с заданным значением. Учитывая что в полях могут быть подобные же структуры, куда тоже надо инжектить тип, надо реализовать кастомным маршалером. Но самый просто вариант - смаршалить структуру, а потом в полученные байты запихнуть еще одно поле - не работает, т.к. кастомный маршалер логично вызывается циклически. Есть какое-то простое решение, которое мне на ум не пришло? (под простым решением я не имею в виду вручную маршалить всю структуру)
Daniel
@onokonem а ткните мну ссылкой по этим вашим эллиптическим кривым плиз
а что именно нужно? если про то, как это включить в go, так это в гошечке включить - так это в tls.Config. CipherSuites
Daniel
а если общую теорию - то в вике статья вполне годная
Aleksandr
а просто включить свою структуру в структу с полем типа?
включена. но поле может быть не заполнено клиентом
Aleksandr
в случае если не заполнено, я сам ее заполняю
Daniel
научить кастомный маршалер заполнять поле
Aleksandr
научил) но как теперь эту структуру замаршалить? циклический маршалинг
Daniel
ну я бы сделал как
Daniel
а точно там цикл получается?
Daniel
я давненько в ту сторону не смотрел, но, вроде, этот фокус получался
Daniel
https://stackoverflow.com/questions/43176625/call-json-unmarshal-inside-unmarshaljson-function-without-causing-stack-overflow
Aleksandr
супер, работает
Aleksandr
спасибо
Aleksandr
да, кстати, это то же что чуть выше предложили
Daniel
радость в том, что оптимизатор конверсию там выпиливает
Daniel
ну я вот не против, чтобы сломали
aadz
и будет, как два питона
Roman
они же ясно и понятно объяснили что не хотят подобнодо сценария как Python 2/3, должна сохраниться экосистема Go1 но с фичами Go2 если они сломают обратную совместимость то получать 2 экосистемы и большую такую проблему
Roman
ну я вот не против, чтобы сломали
что-бы поломать большую часть библиотек и тащить ещё некое время Go 1 как лишний груз пока все перейдут на новую экосистему? ну нахер..
aadz
А про суслика v.2 ничего не говорили? Может, его тогда уже на барсука, например, поменять?
L
А про суслика v.2 ничего не говорили? Может, его тогда уже на барсука, например, поменять?
сколько наклеек придется переклеить и футболок перекупить!
aadz
угу
Roman
я бы не отказался от нового языка. совсем нового
опять всё снова? ну тогда посмотри на Python 2/3, они тоже этого хотели и получили полный пздц
aadz
ну, если совместиость ломать, то ломать полностью. Тогда хоть все понятно будет
aadz
И обязатально - барсука. Они с сусликами несовместимы по образу жизни
Roman
потому-что люди сидели на Python 2, но они придумали Python 3 который якобы лучше, но у людей приложения и библиотеки на Python 2... если у тебя проект зависит от А, Б и В, но в то время как А и Б перешли на Go 2 а В ещё нет и не скоро вообще перейдёт, но без В вообще никак - то ты останешься на Go 1, который оффициально поддерживают ещё долгое время. а потом тебе понадобится написать Г и поскольку у тебя проект ещё на Go 1 ты напишешь Г для Go 1 а тем кому нужен будет Г будут вынуждены вернуться в Go 1 либо написать снова для Go 2 это полный пиздец, не делайте так, не повторяйте ошибки питона..