Мне трудно заставить параллельный параллелепипед работать правильно. Я работаю с данными, загруженными из источника данных XML. Как только я загружаю данные в память, я перебираю элементы XML и выполняю операцию. Код до добавления параллелизма был протестирован и функционален, и я не думаю, что он влияет на добавление параллелизма. У меня есть 2 неудачные попытки реализации параллелизма, оба с разными выходами. Я использовал блокировку, потому что я не хочу входить в условия гонки.
Для этой реализации он никогда не входит в программу.
var mu sync.Mutex
// length is 197K
for i:=0;i<len(listings.Listings);i++{
go func(){
mu.Lock()
// code execution (tested prior to adding concurrency and locking)
mu.Unlock()
}()
}
Для этой реализации с использованием waitGroups, a runtime out of memory occurs
var mu sync.Mutex
var wg sync.WaitGroup
// length is 197K
for i:=0;i<len(listings.Listings);i++{
wg.Add(1)
go func(){
mu.Lock()
// code execution (tested prior to adding concurrency and locking and wait group)
wg.Done()
mu.Unlock()
}()
}
wg.Wait()
Я не совсем уверен, что происходит, и мог бы использовать некоторую помощь.