
Антон
13.02.2017
19:03:12

Quet
13.02.2017
19:03:55
ну и в любом случае
зачем гадать если есть pprof

Антон
13.02.2017
19:04:02

Google

Kirill
13.02.2017
19:05:01

Антон
13.02.2017
19:05:22
говнокод везде. Здесь вопрос где именно

Denis
13.02.2017
19:05:38
Везде же

Quet
13.02.2017
19:05:42
pprof религия не даёт использовать?

Roman
13.02.2017
19:06:08
Func Auto Update, в ней цикл for, в нем var lastUpdate - строка 265

Антон
13.02.2017
19:06:11

Roman
13.02.2017
19:06:35
Переменная создается но не очищается gc возможно

Quet
13.02.2017
19:06:40

Антон
13.02.2017
19:06:46

Roman
13.02.2017
19:06:48
Потому что внутри блока

Quet
13.02.2017
19:07:00
окей, убедил

Kirill
13.02.2017
19:07:19

Google

Антон
13.02.2017
19:08:01
Везде же
аргументный аргумент. Но мне вообще практическую задачу на нём решать

Roman
13.02.2017
19:08:11
Автор! Алле? Объясни строку 265?

Мерлин
13.02.2017
19:08:30

Quet
13.02.2017
19:08:32
мне уже кажется что жирновато троллит автор )

Антон
13.02.2017
19:08:55

Roman
13.02.2017
19:09:08
и что?
Зачем ты в бесконечном цикле создаешь заново переменную?

Антон
13.02.2017
19:09:35
по факту

Roman
13.02.2017
19:10:10
Но зачем?

Антон
13.02.2017
19:10:24
согласен, можно нанооптимизировать

Мерлин
13.02.2017
19:10:44
Но зачем?
Да нормально, компилятор выносит декларацию за цикл
По крайней мере для нативных типов

Denis
13.02.2017
19:11:55
Автор, где течь?

Антон
13.02.2017
19:12:14

Denis
13.02.2017
19:12:23
Выше по тексту писал, что нашел
Потом что-то о стд
Потом что всё-таки твой код

Google

Антон
13.02.2017
19:13:34

Denis
13.02.2017
19:13:44
там редко говнокод, который течёт.
удивишся

Антон
13.02.2017
19:16:50
удивишся
а я и не отрицал. Но мой опыт написания этой программы говорит лишь о том, что нужно хорошо понимать свой рантайм, и builtin типы

Quet
13.02.2017
19:17:27
а причём тут хмл? ну держит твой слайс backing array
и не даёт сборщику его собрать
причём тут и хмл....

Denis
13.02.2017
19:17:54

Антон
13.02.2017
19:18:23
я ожидал, что структуры будут переинициализированны
и слайсы в них тоже
что было ошибкой :)

Denis
13.02.2017
19:19:29
отличная история

Denis
13.02.2017
19:22:12
Завуалировали знатно:) но новичкам пойдет

Roman
13.02.2017
19:23:06
Так у тебя s.RknService глобальный слайс и везде по ссылке передается и никогда не освободится

Антон
13.02.2017
19:24:11

Roman
13.02.2017
19:24:23
Где?

Антон
13.02.2017
19:24:48
но
это не освобождает ранее созданные структуры в этом слайсе
т.е. при очередном парсинге, ранее созданные структуры только пополняют свои слайсы и увеличиваются в размере

Google

Антон
13.02.2017
19:26:11
и естественно сборщик их не дропает

Roman
13.02.2017
19:26:16
Ну да, я об этом и говорю

Антон
13.02.2017
19:28:22
вообще да, в си было бы так же
я же не менял capacity

Roman
13.02.2017
19:29:22
Есть разные алгоритмы сборки мусора и читал я об этом, прости господи, в книжке про Java.

Антон
13.02.2017
19:30:58
У го и явы, конечно, есть отличаи, но если я правильно понимаю не в этом

Roman
13.02.2017
19:31:43
http://stackoverflow.com/questions/16971741/how-do-you-clear-a-slice-in-go
Просто непонятно вовсе зачем делать глобальный объект и очищать его в методе

Антон
13.02.2017
19:34:29
мне бы этот ответ не подошёл) Я хотел создать слайс подходящей длинны с запасом. И переиспользовать его (чтобы не выделять эту память при каждой итерации). Но для этого нужно было бы пройтись по каждому элементу созданного слайса и зарезеттить каждое поле структуры, которая в этот сайс входит

Roman
13.02.2017
19:34:48
Бесконечный цикл в методе тоже говнокод на мой взгляд. Запускаешь какой нибудь my.base.Download() а оно у тебя зависает как то непредсказуемо.

Admin
ERROR: S client not available

Антон
13.02.2017
19:35:30

Roman
13.02.2017
19:35:39

Антон
13.02.2017
19:35:41
мне нужно было понять как работает сборщик в го

Roman
13.02.2017
19:37:51
This might be the optimal approach in some scenarios. But it might also be a cause of "memory leaks" - memory not used, but potentially reachable (after re-slicing of 'slice') and thus not garbage "collectable"

Антон
13.02.2017
19:39:07

Roman
13.02.2017
19:39:51
Ну отлично, посмотри остальные советы.

Антон
13.02.2017
19:42:13
Ну отлично, посмотри остальные советы.
Ещё раз повторяю: я всё понял ещё задолго вопроса здесь (и сразу сказал, что ошибка в моём коде). Мне было важно показать пример, когда на коде ревью и в го баги не сразу распознаются

Roman
13.02.2017
19:42:50
Я бы логику таймаутов оставил в main, выделение памяти бы сделал в вызываемой функции работы с данными и очищалась бы она автоматом по завершении. Совсем не та задача где требуется переиспользование памяти.

Google

Антон
13.02.2017
19:42:59
это реальная история кодинга на го
данных реально много. Да, можно хранить в in-memory бд, но такой задачи пока не стоит. Проще несколько тхреадов

Roman
13.02.2017
19:48:34
Я уже предлагал в чате nag.ru использовать для этих целей Тарантул
Используя k/v базу данных легко пробегать по записям, проверять изменения и делать инкрементиальные процедуры

Антон
13.02.2017
19:53:07
но тем не менее да, твой вариант сто пудово рабочий в моём случае. Я просто тещщу оба варианта, чтобы принять решение

Daniel
13.02.2017
19:54:57
и не сравнить ли нам его с тем же аэроспайком

Denis
13.02.2017
19:55:18
Мне интересен хайп вокруг него

Daniel
13.02.2017
19:55:20
одинокого, и в кластере из трех нод

Denis
13.02.2017
19:55:26
Почему он не аэро

Roman
13.02.2017
19:55:27
Потестить, сравнить. Да

Denis
13.02.2017
19:55:30
Или редис
Ну редис понятно
Чем тарантул так привлекателен ?
Если одним словом

Roman
13.02.2017
19:56:08
Настоящие транзакции

Denis
13.02.2017
19:56:46
Если в Lua на стороне сервера ?
Базы*

Roman
13.02.2017
19:57:21

Антон
13.02.2017
20:01:10