0
我有一个工作应该处理作业,并在这名工作人员有数据库读写,日志文件,接收API和一些数据计算。避免与golang数据竞争工人
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}
}
这是我的主要func运行员工。
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)。我希望工作能够更快地被工人处理。
任何建议或提示将有所帮助。谢谢。
您在'main'中使用WaitGroup是可疑的 - 您只需调用'Add(1)'一次,然后在goroutine中多次调用'Done'(对于'data'中的每个元素)。 – ain
“我希望工作能够更快地被工人处理。” ---你真的认为几纳秒会让你的代码变慢吗? – zerkms
等待API或数据库响应时消耗的时间。这个问题的主要问题是,我应该如何在没有数据竞争的情况下同时独立完成这些工作。 – Weiwei