@proGO

Страница 1596 из 1674
Zver
29.07.2018
07:53:37
А append(newSlice, oldSlice...)?
Скорее всего. При этом newSlice пустой.

Sergey
29.07.2018
07:58:40
https://play.golang.org/p/v0LDTiPxGvD Код из книги
планировщик так срабатывает

Google
Sergey
29.07.2018
07:59:47
https://play.golang.org/p/7mXlTfKu_xc если явно его вызвать, то все ок

код из книги похож как раз на пример того, как работает планировщик (scheduler)

Aleksey
29.07.2018
09:03:18
https://play.golang.org/p/7mXlTfKu_xc если явно его вызвать, то все ок
Спасибо. В книге не упомянули о такой возможности, то ли считали должен знать, то ли еще по какой причине. Использование sync.WaitGroup тоже решает и жту проблему и проблему ожидания окончания горутин и освобождения каналов

Vladislav
29.07.2018
12:37:10
Коллеги. Подскажите, пожалуйста, есть ли уже где-то проверенная либа для реализации именованных мутексов? Хочется, чтобы была возможность сделать mtx.Lock(name) и mtx.Unlock(name). В гугле нашел лишь пару либ с обновлениями 3 года назад

Vladislav
29.07.2018
12:42:52
зачем?
Что бы брать лок перед выполнением длительных операций над сущностью в отдельных друг от друга модулях

Roman
29.07.2018
12:44:03
Roman
29.07.2018
12:49:00
да
ну так в чём проблема написать своими ручками? оборачиваешь map[string]sync.Mutex{} в структуру и усио

Google
Vladislav
29.07.2018
12:49:53
никаких проблем, я уже так сделал. Решил спросить насчет готового решения. Ну и простая мапа с мутексами, как мне кажется, будет "течь"

Roman
29.07.2018
12:50:47
никаких проблем, я уже так сделал. Решил спросить насчет готового решения. Ну и простая мапа с мутексами, как мне кажется, будет "течь"
готовые решения обновлялись 3 года назад скорее всего из-за того что эта задача тривиальная, там обновлять нечего)) это как она будет течь?

Pawel
29.07.2018
12:52:24
а почему бы и нет?
Есть обычные мутексы - на кой хрен их именовать?

Можно сделать глобальную мапу строка-мутекс но это дичь какая то

Roman
29.07.2018
12:53:31
Есть обычные мутексы - на кой хрен их именовать?
речь же о динамике, локи на динамичные ресурсы насколько я понял

Zver
29.07.2018
12:53:33
По мне, именованные мутексы нужны только при межпроцесном взаимодействии.

Zver
29.07.2018
12:54:25
речь же о динамике, локи на динамичные ресурсы насколько я понял
Ну так пусть у этих ресурсов будет свой личный мютекс.

Roman
29.07.2018
12:54:47
По мне, именованные мутексы нужны только при межпроцесном взаимодействии.
именованные мьютексы нужны только в случае динамики, а так чем var someNamedLock sync.Mutex{} не именованый мьютекс?!

Vladislav
29.07.2018
12:54:59
готовые решения обновлялись 3 года назад скорее всего из-за того что эта задача тривиальная, там обновлять нечего)) это как она будет течь?
ну, если количество уникальных ключей постоянно растет. Пока сходу не придумал как ее чистить безопасно

Vladislav
29.07.2018
12:55:40
Ну так пусть у этих ресурсов будет свой личный мютекс.
ну, безусловно. Просто мапа с мутексами - это и есть по-сути мапа с ресурсами, т.к. весь ресурс - это ключ

Pawel
29.07.2018
12:56:31
именованные мьютексы нужны только в случае динамики, а так чем var someNamedLock sync.Mutex{} не именованый мьютекс?!
Думаю под именованными подразумевался мутекс, который можно получить из строки.

Roman
29.07.2018
12:56:33
ну, безусловно. Просто мапа с мутексами - это и есть по-сути мапа с ресурсами, т.к. весь ресурс - это ключ
оберни ресурс лучше в структуру с мьютексом, мне кажется так будет лучше

Vladislav
29.07.2018
12:58:02
От этого задача не изменится. Где-то будет висеть мапа с этими ресурсами. Насчет UnlockDestroy не очень понял если честно

Roman
29.07.2018
12:59:15
type AbstractResource struct{ name string lock sync.Mutex } func NewAbstractResource(name string) *AbstractResource { return &AstractResource{ name: name, lock: sync.Mutex{}, } } func (r *AbstractResource) DoSomething() { r.lock.Lock() defer r.lock.Unlock() // do your exclusive work }

От этого задача не изменится. Где-то будет висеть мапа с этими ресурсами. Насчет UnlockDestroy не очень понял если честно
ну когда тебе ресурс больше не нужен ты его из мапы просто удаляешь.. в чём проблема?

Zver
29.07.2018
13:02:31
И зачем тут имя?

Google
Zver
29.07.2018
13:02:58
Тот же самый мютекс и получается.

Vladislav
29.07.2018
13:12:56
Проблемы и нет, я изначально спрашивал лишь о готовых реализациях. В своей наивной реализации задумался над корректностью удаления мутекса из мапы после разблокировки с точки зрения возможных косяков при конкуррентном доступе: func (n *NamedLock) Unlock(name string) { n.l.Lock() localLock, ok := n.locks[name] if !ok { panic("no mutex acquired with name " + name) } n.l.Unlock() localLock.Unlock() } будет ли это корректно работать, т.к. между последними двумя строчками может вклиниться другой поток

Pawel
29.07.2018
13:14:48
Странный вопрос. Если поток может вклиниться, то как оно может корректно работать?

Vladislav
29.07.2018
13:18:29
скорее всего это не будет критичным, т.к. один фиг мы уже в Unlock находимся, хотя не уверен. Буду писать тестики

Vladislav
29.07.2018
13:23:00
а, ну кстати да. чот я сильно протупил. можно же все закрыть локом на мапу

Roman
29.07.2018
13:23:34
ну а UnlockDestroy просто разблокирует и удаляет в 1 операции когда этот лок уже не нужен

Zver
29.07.2018
13:24:27
И будут потом все с этими именованными каналами в локах сидеть.

Vladislav
29.07.2018
13:25:35
про UnlockDestory не нахожу инфу. Это в тандартной библиотеке метод? в sync его не вижу

Roman
29.07.2018
13:26:52
func (n *NamedLock) UnlockDestroy(name string) { n.l.Lock() defer n.l.Unlock() localLock, ok := n.locks[name] if !ok { panic("no mutex acquired with name " + name) } localLock.Unlock() delete(n.locks, name) }

Vladislav
29.07.2018
13:28:53
да, я уже так сделал ) спасибо

И будут потом все с этими именованными каналами в локах сидеть.
ну, к сожалению, нельзя с разделом в lvm работать одновременно в несколько лиц

Zver
29.07.2018
13:48:47
А к lvm каким образом доступ получаете?

Vladislav
29.07.2018
13:54:59
через exec =)

Zver
29.07.2018
13:56:05
через exec =)
А lvm именованные?

Vladislav
29.07.2018
13:57:08
если речь про логические томы, то конечно именованные

Zver
29.07.2018
13:57:34
Matwey
29.07.2018
13:59:04
Господа

Zver
29.07.2018
13:59:30
Товарищи.

Google
Matwey
29.07.2018
13:59:34
А что бы это значило: # /root/go/bin/govendor sync -v fetch "github.com/prometheus/procfs" failed to copy package from "/root/go/.cache/govendor/github.com/prometheus/procfs" to "/root/go/src/github.com/influxdata/influxdb/vendor/github.com/prometheus/procfs": stat /root/go/.cache/govendor/github.com/prometheus/procfs/fixtures/26231/exe: no such file or directory

Vladislav
29.07.2018
13:59:36
не совсем. там еще есть часть более комплексной логики, которая защищается. lvm здесь в контексте вирт. серверов (доменов). Поэтому мутексами защищается логика по работе с сервером, чтоб нельзя было, например, выполнить его пересоздание в момент восстановления из резервной копии

Matwey
29.07.2018
13:59:56
И не полностью синхронизуется procfs, не хватает в нем запчастей, xfs например

Посмотрел куда файл указывает, он оказался символической ссылкой

И указывает на несуществующий vim

Это какой-то юнит-тесты что-ли?

Zver
29.07.2018
14:02:06
Которая будет инкапсулировать всю работу с сервером. Это по мне логичней и будет более цельно, отлаживать и тестировать будет проще.

Vladislav
29.07.2018
14:07:18
безусловно я с вами согласен, что это будет более зрелое решение и к нему обязательно вернемся. Просто это требует больше времени на разработку, а проблему нужно решить сейчас без переделывания кучи кода )

andrew
29.07.2018
14:34:00
Подскажите, может случиться состояние гонки между горутинами при использовании бд?

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

При запросе в бд горутина отправляет запрос и запускается другая горутина которая проверяет тот же запрос

Потом первая продолжает и прибавляет

Потом продолжается вторая и тоже прибавляет

Хотя должна только одна)

Roma
29.07.2018
14:41:25






Народ Как передать контекст?

И где его взять?

Google
Sergey
29.07.2018
14:41:59
Еее Print Screen

Roma
29.07.2018
14:42:12
У меня инета нет

Я в машине еду

Oleg
29.07.2018
14:42:59
И где его взять?
берешь создаешь контекст, закидываешь по ключу значение, после достаешь по ключу, гугл вроде в таких вопросах не отказывает

Oleg
29.07.2018
15:07:55
Ребята, не у кого не завалялось конфигов для https://github.com/hyperledger/caliper , хочу сделать бенчмарки Hyperledger Fabric, но пока плохо понимаю в том как это делать

andrew
29.07.2018
15:18:21
А есть варианты как избежать гонку?

Александр
29.07.2018
15:18:53
при использовании стандартного драйвера - не может

ну по крайне мере на уровне драйвера

там используется пулл коннектов для этого

на уровне бд - может

Vladislav
29.07.2018
15:19:43
при использовании стандартного драйвера - не может
в данном случае, как я понимаю, сначала делается select и потом update/insert

Александр
29.07.2018
15:19:51
транзакции есть?

andrew
29.07.2018
15:19:56
Есть но какой смыс если трабла в смене горутин

Одна горутина спит и ждет результата, проверяется другая

Vladislav
29.07.2018
15:21:14
сделайте операцию через каналы

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