@proGO

Страница 1327 из 1674
Dmitry
30.03.2018
21:46:55
Спасибо, кэп
Ну такое. К интерфейсу я могу привести произвольный объект, а к структуре - нет.

Daniel
30.03.2018
21:49:35
Roman
30.03.2018
21:50:23
Только получить стектрейс и распарсить
или есть какой-то более элегантный способ дебажить concurrency проблему нежели логирование?

Daniel
30.03.2018
21:50:41
нет

Google
Roman
30.03.2018
21:51:17
Только получить стектрейс и распарсить
по поводу парсинга stacktrace'а, есть примеры? или хотя бы наводка того что мне гуглить?

а вот, runtime.debug.PrintStack() вроде

Roman
30.03.2018
22:12:56
Рейс детектор есть замечательный
который говорит какая горутина писала туда откуда читала другая, да... но на то чтобы отследить почему это происходит - не всегда одного его хватает

yuriy
30.03.2018
22:27:51
там вроде довольно подробно previous read тут previous write тут

https://github.com/cheekybits/genny кто-то мучал genny под виндой? у меня какая-то беда с чтением файла

https://i.gyazo.com/7d71ef0c4cf1f0889f01e7362a6a5a30.png

Marlik
31.03.2018
00:44:40
Ошибка в коде имхо...

Попробуйте -in="gen.go" -out="zzz.go"

Dmitriy
31.03.2018
00:53:03
ребятки, ткните пожалуйста носом в либу для демонизации

а то чет я уже загибаюсь(

Marlik
31.03.2018
00:54:51
ребятки, ткните пожалуйста носом в либу для демонизации
Я чот када начал интересоваться этим в начале, не нашёл. Я искал классического юниксового демона.

Dmitriy
31.03.2018
00:55:20
ну есть вот такое вот https://github.com/sevlyar/go-daemon

Google
Dmitriy
31.03.2018
00:55:30
но он чет поверх свой логер накладывает

Marlik
31.03.2018
00:55:35
Не, это я видел...

Dmitriy
31.03.2018
00:57:05
конечно всегда можно запустить nohup, но чет кажется костыль это

Marlik
31.03.2018
00:58:18
По моему это не костыль)))) func main(){ for { ... } } И через системд запускать....

yuriy
31.03.2018
00:58:53
Попробуйте -in="gen.go" -out="zzz.go"
пробовал а у тебя работает под виндой?

Marlik
31.03.2018
00:59:55
пробовал а у тебя работает под виндой?
У меня винда только для танчиков, я туда редко хожу... я просто пытаюсь тебе хоть как-то помочь)))))

yuriy
31.03.2018
01:00:18
оки, спасимба)

Marlik
31.03.2018
01:03:14
ну есть вот такое вот https://github.com/sevlyar/go-daemon
В принципе в пакете os можно ещё посмотреть, ну там сигналы и всё такое... так-то любой демон это тупо цикл, просто обрабатывать сигналы от ос нуно, и открепиться от ввода, вывода терминалов... про форканье молчу, ибо не знаю как оно в го...

Dmitriy
31.03.2018
01:22:35
В принципе в пакете os можно ещё посмотреть, ну там сигналы и всё такое... так-то любой демон это тупо цикл, просто обрабатывать сигналы от ос нуно, и открепиться от ввода, вывода терминалов... про форканье молчу, ибо не знаю как оно в го...
"Yes, it is possible using os.Args which holds the executable name of the current process, and the os.exec package that can start and fork processes. A good example is how it is done in the goagain package, which supports zero downtime restarts. In fact, you can probably just use it."

как то можно думаю )

буду копать https://github.com/rcrowley/goagain/blob/master/goagain.go#L77

Marlik
31.03.2018
02:43:21
как то можно думаю )
Поделись если чо-нить придумаешь, тоже интересно...

yuriy
31.03.2018
11:09:01
я победил genny под виндой вообщем, первый нюанс, сначала нужно пускать флаги а потом аргументы к командной строке я с этим и раньше сталкивался но не понял в чем проблема то есть genny -in -out gen а не genny gen -in -out как написано на гите

Roman
31.03.2018
13:29:37
почему мне: os.MkdirAll(sessFilesPath, 0640) возвращает: stat: <path>: no such file or directory

Andrey
31.03.2018
14:03:38
Знающие люди подскажите: Какой из варианто займёт меньше памяти ? В функцию надо передать массив Вариант 1 пердаём массив в функции tmp := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl) tmp1 := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl) Вариант 2 передаём переменную var aa:= []byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02} tmp := dummy(aa, lbl) tmp1 := dummy(aa, lbl) Вариант 3 передаём указатель на переменную var aa:= &[]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02} tmp := dummy(aa, lbl) tmp1 := dummy(aa, lbl)

Что то мне кажется что первый вариант

Roman
31.03.2018
14:12:53
Знающие люди подскажите: Какой из варианто займёт меньше памяти ? В функцию надо передать массив Вариант 1 пердаём массив в функции tmp := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl) tmp1 := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl) Вариант 2 передаём переменную var aa:= []byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02} tmp := dummy(aa, lbl) tmp1 := dummy(aa, lbl) Вариант 3 передаём указатель на переменную var aa:= &[]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02} tmp := dummy(aa, lbl) tmp1 := dummy(aa, lbl)
1. в первом ты создаёшь 2 слайса 2. во втором только один и передаёшь ссылку на него в 2 функции 3. в третьем создаёшь слайс, создаёшь указатель на слайс и его передаёшь копией в 2 функции самый верный из всех: второй третий вообще бессмысленен, поскольку сам по себе слайс это не array! слайс это указатель на array (header type)

Andrey
31.03.2018
14:16:36
Просто при преедаче 6 байт их проще было бы передать ка кбайты а не как указатель на байты

но так как тут слайс. У него по мимо данных ещё три пармтера

Google
Andrey
31.03.2018
14:18:33
указатель в современных компьютерах это 8 байт.

Roman
31.03.2018
14:20:16
Просто при преедаче 6 байт их проще было бы передать ка кбайты а не как указатель на байты
для этого есть array, можешь передать указатель на array, но зачем..

указатель в современных компьютерах это 8 байт.
не "современных" а 64 битных, есть и современные 32 битные процессоры, многие ARM'ы например, там указатель 4 байт

Andrey
31.03.2018
14:21:25
по 32 можно уже забывать. Эпл и гугль уже вычищают 32 битные приложения

Roman
31.03.2018
14:23:31
по 32 можно уже забывать. Эпл и гугль уже вычищают 32 битные приложения
в любом случае 32 битные процессоры ещё долго не исчезнут полностью

Andrey
31.03.2018
14:24:13
в любом случае 32 битные процессоры ещё долго не исчезнут полностью
Я исхожу из свох задач. А реальноть такова что укатели становятся тяжелыми.

Roman
31.03.2018
14:26:43
Я исхожу из свох задач. А реальноть такова что укатели становятся тяжелыми.
можешь побенчмаркить что легче, указатель на array, или простой слайс, если это так важно, полагаю что первое, но могу ошибаться

Andrey
31.03.2018
14:27:50
Да и спросил чтобы не бенчмакить. Но похоже прийдётся :)

Daniel
31.03.2018
14:28:05
придется, конечно

и на разных процах может по-разному оказаться, учтите

Roman
31.03.2018
14:40:40
и на разных процах может по-разному оказаться, учтите
хмм, насколько мне известно - array это тупо C-style array, а слайс это header type с несколькими полями: указатель на массив, int размера и int capacity т.е. теоретически указатель на массив должен быть легковеснее на любых системах

Roman
31.03.2018
14:42:15
Наверено я сегодня туплю. Я считал что слайс это структура а не указатель. И если мы в функцию пишем слайс в качестве параметра , то передаётся структура а не указатель. Я не прав?
всё верно, слайс это структура, но я называю его "указателем" по той причине, что это header type, это не сам массив, а указатель на массив с ещё несколькими полями: int size и int capacity



вернее будет называть слайс = "desciptor'ом"

Andrey
31.03.2018
14:44:28
хмм, насколько мне известно - array это тупо C-style array, а слайс это header type с несколькими полями: указатель на массив, int размера и int capacity т.е. теоретически указатель на массив должен быть легковеснее на любых системах
Я про array ничего не говорил. Слайс это структура из 2 парамтров и указателя на array. Вопрос был что предеасться при записи в функцию tmp1 := dummy([]byte{0x02, 0x01, 0x02, 0x02, 0x01, 0x02}, lbl) указатель или стурктура?

Я думаю что структура

Roman
31.03.2018
14:45:12
ты не копируешь при этом сам array, только эти 3 64/32 битных поля

Andrey
31.03.2018
14:45:44
я это понимаю

Google
Andrey
31.03.2018
14:46:13
тогда с точки зрения экономии памяти мне лучше предавать всё же указатель

на слайс

Roman
31.03.2018
14:46:31
а в первом твоём примере ты создаёшь 2 отдельных слайса, каждый со своим массивом

Admin
ERROR: S client not available

Andrey
31.03.2018
14:47:05
зачем указатель на слайс?!
потому что кажды раз в функцию будет копироваться структура. Она по размер будльше чем указатель

Daniel
31.03.2018
14:48:03
коллеги, надо мерять

Andrey
31.03.2018
14:48:16
коллеги, надо мерять
я тоже так думаю

Daniel
31.03.2018
14:48:17
в гошечке часто указатели медленнее копирования

Roman
31.03.2018
14:49:42
потому что кажды раз в функцию будет копироваться структура. Она по размер будльше чем указатель
копировать 3 integer'а для современной архитектуры это раз плюнуть... а вот создать лишний указатель значит создать лишнюю нагрузку на Garbage Collector однако это всё очень не явно, зависит от оптимизаций компилятора, архитектуры и самого процессора, от колва таких операций и и и и и и и.... то чем ты занимаешься называется микрооптимизация, и скорее всего ты тратишь на неё время зря

Daniel
31.03.2018
14:50:04
точно зря

я тут последний раз брался за профайлер месяц назад. с мыслью, что надо будет все оптимизнуть

Roman
31.03.2018
14:51:13
настоящие тормоза в программе всегда выявляются профайлером, и зачастую не связаны с тем, сколько байт ты там скопировал при передаче указателя или слайса

Daniel
31.03.2018
14:51:17
и что же? оказалось, что 90% времени у меня работает json marshaling

Daniel
31.03.2018
14:51:53
все, что я смог сделать, это заменить стандартный на easyjson

и все

Andrey
31.03.2018
14:52:31
У меня проблема не с тормозами. А с памятью

Daniel
31.03.2018
14:52:54
тоже меряйте

Google
Andrey
31.03.2018
14:52:56
у меян устройство на мобилке работает

Roman
31.03.2018
14:53:43
У меня проблема не с тормозами. А с памятью
тогда не создавай лишних указателей, если у тебя настолько проблемно с памятью то gc наверное упахивается... и ещё раз: профайлить, профайлить, потом попить кофе и ещё раз профайлить

в Go несколько мне изветно, чем больше указатей, тем сложнее gc

https://youtu.be/-_05_OXYLHA

Andrey
31.03.2018
14:55:00
Похоже мы будем бить прогу на части. Но так в го как длл нет то думаем делать микросервисы. Пытались рефлексию использовать. но она тормозом оказалась. На мобильнике миросервисы. ?

я сам в шоке

Andrey
31.03.2018
14:56:28
а какой ещё есть вариант? Прогв уже 5тыс файлов

Daniel
31.03.2018
14:57:02
а что не так-то с 5К файлов?

или они у вас в одном пакете?

Andrey
31.03.2018
14:57:23
мы уже ту тему с Daniel Podolsy обсуждали

Daniel
31.03.2018
14:57:31
я помню, да

Andrey
31.03.2018
14:57:39
не... они в разных пэкаджах

Страница 1327 из 1674