Избегайте гонок данных с Голангом
У меня есть jobWorker, который должен иметь дело с заданиями, и у этого работника была запись, чтение, запись файла журнала, получение API и некоторые вычисления данных.
var mystruct strcut{}
func worker(v) {
Get data from database
...
Update database status
...
useByWorker()
...
Do some computing
...
Receive API
...
Write log file
}
func useByWorker() {
mystruct = {1,2,3}
}
Вот моя основная функция для запуска go-worker.
func main() {
var wg sync.WaitGroup
data := [][]string{}
wg.Add(1)
for k,v := range data {
k := k
v := v
go func(k int, v []string) {
fmt.Println(k,v)
worker(v)
wg.Done()
}(k, v)
}
wg.Wait()
}
Проблема гонки данных позволила логу и моим данным, используемым в работнике, перепутаться. Любой способ может просто решить проблему гонки данных без блокировки (Mutex.Lock). Я хочу, чтобы рабочие могли работать быстрее.
Любые предложения или советы помогут. Благодарю.
1 ответ
Если вы хотите неблокируемый доступ для записи в файл, вы можете использовать одну процедуру для записи в файл, передавая сообщения по каналу. Блоки можно избежать с помощью буферизации каналов или вы можете использовать стандартный регистратор. Может работать с несколькими программами.