@proGO

Страница 1275 из 1674
Vladimir
09.03.2018
07:17:23
Был Foo, bar, baz , порядок был baz, bar, foo при обходе. Добавили baq, и стало baq, baz, bar, foo

m
09.03.2018
07:17:25
"в лоб" лочить весь мап
тогда пока я буду обходить весь map, а это часы, никто не сможет с ним работать. а это неприемлемо.

Daniel
09.03.2018
07:17:30
довольно просто - на период обхода создаваемое, обновляемое и удаляемое пишутся в две отдельные мапы

Vladimir
09.03.2018
07:17:30
Чо ты делать будешь?

Google
Anatoly
09.03.2018
07:17:40
@MichaelMonashev снапшот

лочишь мап, делаешь копию, отпускаешь. Обходишь копию

Daniel
09.03.2018
07:18:06
или снепшот, или ченджлог :)

Vladimir
09.03.2018
07:18:41
golang.org/pkg/sync/#Map или вот и Range

Daniel
09.03.2018
07:19:54
нет, синкмап устроен иначе

Anatoly
09.03.2018
07:19:55
нет, он имел ввижу журнал

Daniel
09.03.2018
07:20:21
но да, возможно, для топикстартера синкмап подойдет лучше

Anatoly
09.03.2018
07:20:26
RW мапа изменений которая применяется после длительной операции с основным массивом

повышает эффективность в плане памяти но просаживает цпу

Vladimir
09.03.2018
07:21:18
нет, синкмап устроен иначе
Достаточно похоже на то что ты описал на самом деле

Google
Marlik
09.03.2018
07:21:54
Люди подскажите, не могу анмаршал в структуру сделать, где-то накосячил видимо, но байты ловлю. Как то мне прочитать эти байты нуно, посмотреть что внутрях приходит?

Anatoly
09.03.2018
07:22:44
а в чем вопрос-то?

m
09.03.2018
07:23:04
посмотрел код https://golang.org/pkg/sync/#Map.Range и не пойму, можно ли в функции, вызываемой для каждого лемента, делать time.Sleep(). . т.е. во время этого слипа другие горутины смогут работать с мэпом или нет?

Marlik
09.03.2018
07:23:30
а в чем вопрос-то?
Распечатать байты, анмаршал чото не работает.

Anatoly
09.03.2018
07:23:42
у тебя вопрос "как распечатать байты"?

Marlik
09.03.2018
07:24:45
Anatoly
09.03.2018
07:24:52
:)

Vladimir
09.03.2018
07:25:06
Так что должно быть нормально.

Функция дёргается не под локом

m
09.03.2018
07:30:26
я тут подумал, что идея со снэпшотом мне не подходит. Хочется при итерации работать всё таки с последними данными map-а.

Daniel
09.03.2018
07:31:23
с последними не получится. все, что надобавлялось-изменилось будет обработано в конце

а какого размера мапа-то?

сколько элементов?

m
09.03.2018
07:31:53
около 1 млн.

мне на самом деле подойдёт и получение случайного элемента.

Daniel
09.03.2018
07:32:41
случайный элемент - это вызвать range, получить первый и закрыть цикл

можно еще создать канал с буфером размером с мапу и быстренько затолкать в него ее всю :)

Google
Daniel
09.03.2018
07:33:26
а дальше читай сколько влезет

только при чтении надо еще проверять, все ли еще элемент в мапе

m
09.03.2018
07:33:50
всё таки случайность имелась в виду , что это более мягкий способ обойти ВСЕ элементы.

Daniel
09.03.2018
07:34:11
range гарантировано начинает со случайного места

m
09.03.2018
07:35:04
не знал про такое свойство range. оно прописано в доках или в текущей реализации так?

Daniel
09.03.2018
07:35:14
в доках прописано

m
09.03.2018
07:38:36
в доках прописано
почитал, нету там такого.

Daniel
09.03.2018
07:39:09
да как же нет

m
09.03.2018
07:40:09
The iteration order over maps is not specified and is not guaranteed to be the same from one iteration to the next. If a map entry that has not yet been reached is removed during iteration, the corresponding iteration value will not be produced. If a map entry is created during iteration, that entry may be produced during the iteration or may be skipped. The choice may vary for each entry created and from one iteration to the next. If the map is nil, the number of iterations is 0.

это отсюда: https://golang.org/ref/spec#RangeClause

Vladimir
09.03.2018
07:42:31
@MichaelMonashev а зачем вообще тебе нужно такое поведение? И откуда требование "текущего состояния" при range?

Daniel
09.03.2018
07:43:13
скажи лучше - ты помнишь, с какой верси range рандомный гарантировано?

Daniel
09.03.2018
07:43:39
в доки, видимо, это не попало, а было только в release notes

m
09.03.2018
07:44:07
в доки, видимо, это не попало, а было только в release notes
так это тогда поменять могут в любой момент.

Daniel
09.03.2018
07:44:25
могут, но нам-то что?

m
09.03.2018
07:45:22
Дык, станет выбирать всё время, например, один и тот же элемент и не сможет все обойти вообще никогда.

Vladimir
09.03.2018
07:46:16
И у меня чем дальше тем более четкое ощущение что человек хочет какую то херь сделать

И не понимает что ему надо

Daniel
09.03.2018
07:47:16
у меня была похожая задача

Google
m
09.03.2018
07:47:35
И не понимает что ему надо
Я чётко понимаю, что мне надо. Но оно не совпадает с чужими фантазиями.

Daniel
09.03.2018
07:47:42
мапа на миллион, и обход ее. правда, без слипа, но с отсылкой пуша

Vladimir
09.03.2018
07:47:55
Именно задачу, а не предполагаемое решение

m
09.03.2018
07:49:29
Ну так может быть стоит описать задачу?
Зачем? Чтьобы в очередной раз, как это любят обычно делать для сложных задач, меня назвали мудаком, который всё неправильно делает и хочет неправильного? И вместо того, чтобы подумать над проблемой, думали над моими умственными способностями?

Andrey
09.03.2018
07:50:17
Дык, станет выбирать всё время, например, один и тот же элемент и не сможет все обойти вообще никогда.
Можно еще флаг добавить о том, что элемент обработан или время обработки. Чтобы обработанные исключать.

Vladimir
09.03.2018
07:51:02
Admin
ERROR: S client not available

Andrey
09.03.2018
07:51:22
А обход как реализовать?
Так же как и предлагали, рэнж до первого необработанного элемента

Vladimir
09.03.2018
07:51:29
А в обходе брать Лок и перебирать из канала элементы пока не будет попадание на живой (если удаление возможно)

Потом читать, снимать Лок и дальше жить

Vladimir
09.03.2018
07:51:52
Но непонятно что человеку надо

Andrey
09.03.2018
07:52:40
Но непонятно что человеку надо
Не очень важно) человек хочет понаступать на грабли, чтобы научится. Не будем мешать.

Anatoly
09.03.2018
07:55:31
миллион элементов в мапе

майн гот

Daniel
09.03.2018
07:55:41
почему нет-то?

Google
Anatoly
09.03.2018
07:55:48
потомучто мноха

Daniel
09.03.2018
07:55:52
не

Anatoly
09.03.2018
07:55:57
начинаешь уже думать о редис & etc

Daniel
09.03.2018
07:56:06
много - это в районе 100М где-то

Anatoly
09.03.2018
07:56:20
да ты расточитель и пожиратель памяти!

негодяй

m
09.03.2018
07:57:08
Ок, описываю задачу: есть map . Ключ - юзер, значение - информация о юзере. Нужно, чтобы одна нода рассылала госсипом другим нода имнформацию о юзерах.

Daniel
09.03.2018
07:58:04
а почему в качестве решения выбрано посылать один месседж в секунду?

Anatoly
09.03.2018
07:58:24
юзеров в редис, клиенты subscribe!

в особо сложных случаях, шину на rabbitMQ

Vladimir
09.03.2018
07:59:18
а почему в качестве решения выбрано посылать один месседж в секунду?
Тьфу, удалил. Человек кажется время не говорил нигде. Может там каждые 10мс

Vladimir
09.03.2018
08:03:27
говорил
Ну так всегда же. Если выглядит так словно человек делает очередь, значит он делает очередь

Daniel
09.03.2018
08:03:47
это да

Anatoly
09.03.2018
08:04:08
это только так выглядит

на очердь это не похоже, чесслово

Vladimir
09.03.2018
08:05:00
на очердь это не похоже, чесслово
А что ещё это? Он обходит мапу и элементы шлёт во вне. Ему важно актуальное состояние и все такое. Обычная очередь, но без гарантий порядка вставки

Anatoly
09.03.2018
08:05:21
очередь это не это)

Vladimir
09.03.2018
08:05:24
То что параллельно ему это ещё для чего то нужно - отдельный вопрос

Anatoly
09.03.2018
08:05:31
очередь это все-таки список задач

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