Size: a a a

2020 July 29

ГП

Георгий Папаскири... in Go-go!
День добрый
источник

ЛА

Локоть Анатолий... in Go-go!
Vladislav Milenin
Вся суть переводов книг в 3 словах
Недавно читал про технологии azure русскую версию на их же сайте. Путано. Переключил на английский и все прояснилось 😂
источник

ГП

Георгий Папаскири... in Go-go!
имею функцию:
func snmpNew(hosts []string) {
 var hl []string
 var wg sync.WaitGroup
 wg.Add(len(hosts))
 for _, host := range hosts {
   go func(host string, hl *[]string, wg *sync.WaitGroup) {
     defer wg.Done()
     *hl = append(*hl, host)
   }(host, &hl, &wg)
 }
 wg.Wait()
 fmt.Println(hl)
 for _, i := range hl {
   classes.FileWriteString("temp_new", i)
 }
}
в функцию передаю массив из 254 элементов, дальше с помощью гоурутины создаю новый массив, и результат записываю в файл, в новый массив попадает только часть из них, а не все 254 элемента
источник

ГП

Георгий Папаскири... in Go-go!
при этом, каждый раз кол-во элементов в новом массиве разное
источник

ЛА

Локоть Анатолий... in Go-go!
Георгий Папаскири
имею функцию:
func snmpNew(hosts []string) {
 var hl []string
 var wg sync.WaitGroup
 wg.Add(len(hosts))
 for _, host := range hosts {
   go func(host string, hl *[]string, wg *sync.WaitGroup) {
     defer wg.Done()
     *hl = append(*hl, host)
   }(host, &hl, &wg)
 }
 wg.Wait()
 fmt.Println(hl)
 for _, i := range hl {
   classes.FileWriteString("temp_new", i)
 }
}
в функцию передаю массив из 254 элементов, дальше с помощью гоурутины создаю новый массив, и результат записываю в файл, в новый массив попадает только часть из них, а не все 254 элемента
Вынужден ещё раз скинуть ту же ссылку
https://golangforall.com/ru/post/golang-data-handling-concurrent-programs.html

Там есть пример про слайс

Вы конкурентно пишете в слайс, паники нет, но это работает неверно.
источник

VS

Vladimir Smirnov in Go-go!
Георгий Папаскири
при этом, каждый раз кол-во элементов в новом массиве разное
race condition же типичный
источник

VS

Vladimir Smirnov in Go-go!
append перепишет указатель и статус
источник

VS

Vladimir Smirnov in Go-go!
и каждый раз будет append в какой-то случайный момент времени
источник

VS

Vladimir Smirnov in Go-go!
собери с -race кстати, он на это будет ругаться
источник

p

pragus in Go-go!
Георгий Папаскири
имею функцию:
func snmpNew(hosts []string) {
 var hl []string
 var wg sync.WaitGroup
 wg.Add(len(hosts))
 for _, host := range hosts {
   go func(host string, hl *[]string, wg *sync.WaitGroup) {
     defer wg.Done()
     *hl = append(*hl, host)
   }(host, &hl, &wg)
 }
 wg.Wait()
 fmt.Println(hl)
 for _, i := range hl {
   classes.FileWriteString("temp_new", i)
 }
}
в функцию передаю массив из 254 элементов, дальше с помощью гоурутины создаю новый массив, и результат записываю в файл, в новый массив попадает только часть из них, а не все 254 элемента
тут лучше использовать индексы, а не append
источник

ЛА

Локоть Анатолий... in Go-go!
pragus
тут лучше использовать индексы, а не append
Кстати, норм.
Если заранее создать слайс правильной длины и писать элементы по индексам, то не будет race
источник

АД

Алексей Долгов... in Go-go!
ну если hosts не map[string]string
источник

VS

Vladimir Smirnov in Go-go!
Алексей Долгов
ну если hosts не map[string]string
а там есть или sync.Map или можно в мьютекс обернуть
источник

АД

Алексей Долгов... in Go-go!
или через канал по старинке
источник

ГП

Георгий Папаскири... in Go-go!
добавил Mutex, работает.
источник

ГП

Георгий Папаскири... in Go-go!
Локоть Анатолий
Вынужден ещё раз скинуть ту же ссылку
https://golangforall.com/ru/post/golang-data-handling-concurrent-programs.html

Там есть пример про слайс

Вы конкурентно пишете в слайс, паники нет, но это работает неверно.
спасибо
источник

ГП

Георгий Папаскири... in Go-go!
попробую это же на другой фунции, если возникнут проблемы отпишусь)
источник

p

pragus in Go-go!
Георгий Папаскири
добавил Mutex, работает.
но зачем лишние локи в вашем кейсе?
источник

ГП

Георгий Папаскири... in Go-go!
pragus
но зачем лишние локи в вашем кейсе?
если вы про mutex.lock, то потому что иначе часть данных теряется
источник

VS

Vladimir Smirnov in Go-go!
Георгий Папаскири
если вы про mutex.lock, то потому что иначе часть данных теряется
если там слайс, то @pragus предложил идею про отсутствие мьютекса - каждому воркеру дать id равный ячейке в слайсе и слайс преаллокейтнуть
источник