@proGO

Страница 1138 из 1674
Alexander
13.01.2018
09:01:11
Какой? Как называется он?
sync.Map вроде, у меня не встречались такие проблеммы с мапами

я удаляю только после проверки времени добавления к примеру

Mike
13.01.2018
09:01:48
sync.Map вроде, у меня не встречались такие проблеммы с мапами
Классно. Это неблокирующая конкуррентная мапа или просто обертка над обычной с RWLock?

Demuz
13.01.2018
09:02:03
А вот еще про мутекс было интересно узнать, что происходит в момент Lock(), если в это время к этому объекту пытается обратиться другой метод, с вот этим вторым методом что происходит? Он ответ не получает или ждет, пока объект освободится?

Google
Demuz
13.01.2018
09:02:58
я удаляю только после проверки времени добавления к примеру
Ну, у меня просто теоретически к одному массиву могут обратиться несколько объектов. Думал не произойдет такого. И на тебе ))) Как е****ся сервер ))))



Demuz
13.01.2018
09:05:07
можно просто добавить очередь команд
Пока не буду заморачиваться. Мьютекс вполне интересная вещь. Жаль что я про нее никогда не слышал до этого ))))

Mike
13.01.2018
09:05:31
можно просто добавить очередь команд
RWLock и так держит 2 очереди сам)

По сути

Alexander
13.01.2018
09:06:05
RWLock и так держит 2 очереди сам)
не я про очередь команд на изменение, чтобы не блочить вообще ничего

Google
Alexander
13.01.2018
09:06:20
буффнризированный

Mike
13.01.2018
09:07:39
не я про очередь команд на изменение, чтобы не блочить вообще ничего
Каким образом это будет не блочить? Тебе ж нужно будет дождаться завершения чтения, заблокировать очередь на чтение, выполнить все запросы на запись и потом продолжать выполнять запросы чтение. Иначе будет та же гонка данных между рутинами

Demuz
13.01.2018
09:07:41
Короче посмотрел синк мап, не понял как юзать.

Alexander
13.01.2018
09:07:44
будет конечно невалидность данных на некотором временном участке во время считывания

Demuz
13.01.2018
09:07:45
sync.Map

Mike
13.01.2018
09:07:45
Это и есть крассический RWLock

Где-то приемлемо

В общем случае нет

Alexander
13.01.2018
09:09:09
интересно mutex + map, быстрее redis)

если для кеша

Ilya
13.01.2018
09:09:37
Очень хорошее сравнение ты привел, ага

Mike
13.01.2018
09:09:41
Конечно да) Для кэша можно забить на гонку вообще

И будет намного быстрее

Ну то есть на ту гонку, которая выливается в чтение старых результатов на какой-то момент

Ilya
13.01.2018
09:10:35
У меня вот такой вопрос, как написать тест к библиотеке для ретраев запросов к монге при сетевых ошибках?

Mike
13.01.2018
09:10:41
Для этого как бы и есть неблокирубщие мапы, которые делают снэпшоты для чтения на момент произведения записи

Либа явно должна быть

Demuz
13.01.2018
09:12:14
Для этого как бы и есть неблокирубщие мапы, которые делают снэпшоты для чтения на момент произведения записи
Я их посмотрел, ну верней как тип. Но не понял как использовать. Буду гуглить.

Mike
13.01.2018
09:12:27
У меня вот такой вопрос, как написать тест к библиотеке для ретраев запросов к монге при сетевых ошибках?
Интеграционный тест, сделать запрос на тестовый TCP сервер, который специально положит соединение

Google
Mike
13.01.2018
09:12:49


Ilya
13.01.2018
09:13:20
Тут вопрос в том, что это обёртка для mgo

И проверить надо либо все, либо один из

Demuz
13.01.2018
09:13:41
Это же обычная карта. А я в sync.Map смотрел.

Ilya
13.01.2018
09:13:51
И вариант с провалом всех ретраев, и с успешным ретраем

Mike
13.01.2018
09:13:57
Ilya
13.01.2018
09:14:24
Думал, как вариант, докер клиентом подымать монгу, грохать и поднимать её в нем же

Но выглядит так себе

Можно, конечно, тестировать саму функцию проверки ошибки, мол сетевая она или нет, но такой библиотеке никто доверять не будет, всем нужны наглядные примеры

Mike
13.01.2018
09:19:13
Думал, как вариант, докер клиентом подымать монгу, грохать и поднимать её в нем же
Зачем? Нужно протестить сетевую ошибку, а не ошибку монги. Для этого и dummy tcp server сойдет

Demuz
13.01.2018
09:21:04
https://golang.org/pkg/sync/
Map is a concurrent map with amortized-constant-time loads, stores, and deletes. It is safe for multiple goroutines to call a Map's methods concurrently. Мне вот эта нужна да? Правильно понял?

Mike
13.01.2018
09:21:29
Ну да, видимо)

Ilya
13.01.2018
09:24:10
И как mgo корректно подключиться к такому TCP серверу?

Зачем? Нужно протестить сетевую ошибку, а не ошибку монги. Для этого и dummy tcp server сойдет

Alex
13.01.2018
09:24:44
Классно. Это неблокирующая конкуррентная мапа или просто обертка над обычной с RWLock?
sync.Map немного не для того. У нее под капотом несколько map - для чтения и записи, основная мотивация при её добавлении - решение проблемы cache contention между потоками ОС. Это не замена map + mutex.

https://m.habrahabr.ru/post/338718/

Google
Mike
13.01.2018
09:26:13
И как mgo корректно подключиться к такому TCP серверу?
Ну подключиться подключится, если протокол там tcp. Дальше упадет с ошибкой, если закрыть соединение со стороны сервера.

Ну подключиться подключится, если протокол там tcp. Дальше упадет с ошибкой, если закрыть соединение со стороны сервера.
Или упадет с ошибкой потому что не дождется ответа от сервера по HTTP. (монга вроде поверх него работает?)

Ilya
13.01.2018
09:28:01
mgo умная и умеет определять, к чему она подключилась

Поэтому не прокатит

Demuz
13.01.2018
10:14:26
https://golang.org/pkg/sync/
Спасибо, разобрался. Несложно оказывается. Классная вещь.

А вот там прикол один был. Фреймворк почему то такой тип карты не смог мне отправить в JSON формате. Именно sync.Map. Но если я через sync.Map.Range всё перекладываю в обычную карту Map, то уже возвращает нормально.

Это sync.Map
Ххех, прикол, даже если смотреть на то, что я перекладываю с sync.Map в Map, затем последнее кладу в JSON и отправляю, то скорость по сравнению с результатами с использованием Mutex - Немного выше. Как так?

Admin
ERROR: S client not available

Mike
13.01.2018
10:26:43
С RWMutex затесть

Demuz
13.01.2018
10:30:31
Alex
13.01.2018
11:25:15
sync.Map быстрее при 4+ ядрах насколько помню
Да, в статье на Хабре об этом детальнее написано.

Alexander
13.01.2018
11:30:34
Aleksey
13.01.2018
13:16:39
Можете подсказать как лучше API возвращать ошибку валидации массива: 1) { arrayField: “Array field contains errors on positions [0, 3]” } 2) { arrayField: { 0: “Should be string”, 3: “Isn’t valid email” }, }

Alexander
13.01.2018
13:21:24
Если нужно детально с позициями, я бы так сделал

{ arrayField: [ { position : 0, error: “Should be string” }, { position : 3, error: “Isn’t valid email” } ] }

Aleksey
13.01.2018
13:26:57
{ arrayField: [ { position : 0, error: “Should be string” }, { position : 3, error: “Isn’t valid email” } ] }
Проблема в том, что хотелось бы, чтобы клиент API мог спокойно промапить ошибки. То есть если это будет броузерный javascript, то второй вариант, указанный мной, свободно мапиться на массив полей, так как индексация для массивов и объектов одинаковая. А в случае других языков, при надобности можно свободно получить всю туже информацию просто запросив пары ключ значени (position, error). Вроде меня второй вариант полностью устраивает, но как-то попахивает.

Google
Alexander
13.01.2018
13:28:02
во-первых второй вариант не валидный json, ключи должны быть строками. Его геморно описывать в свагерах и прочих, клиенту придется париться с конвертацией типов и т.д)

Aleksey
13.01.2018
13:29:25
Хороший довод, спасибо

Может кто подсказать хорошие ресурсы про то, как реализовать грамотную валидацию API?

Nick
13.01.2018
13:34:05
Rail
13.01.2018
13:34:53
посоветуйте dark colorscheme для vim?

Andrey
13.01.2018
13:48:35
Да, в статье на Хабре об этом детальнее написано.
Только судя по графикам, до 4 ядер он дикий тормоз. С 4 до 16 быстее не на много. после 16 ядер судя по графику обычный мап вообще не работает.

а если в исходники глянуть, то там обычныё мап. Просто за вас сделали механизмы с мьютексами

и по моему про удаление элемента из мапа он забыли. Нет такой функции

Vladimir
13.01.2018
13:52:06
По сути там два мапа

Один dirty за мьютексом

И второй основной, куда идёт запись тогго что редко меняется

Andrey
13.01.2018
13:53:20
Эти хитрости дают что то кроме оверхеда?

до 4 ядер похоже нет

Vladimir
13.01.2018
13:56:23
Эти хитрости дают что то кроме оверхеда?
В теории если read mostly то должен быть меньше чем от мапа + мьютекс

me
13.01.2018
14:50:08
Привет всем. Кто может объяснить как сделать несколько асинхронных запросов из массива url и записать ответы в массив в том же порядке?

Sergey
13.01.2018
14:50:41
Что значит в том же порядке

Если они приходят ассинхронно

me
13.01.2018
14:51:55
Ну индекс передавать в функцию запроса и в канал возвращать индекс с ответом

Только я не могу разобраться как это в коде сделать

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