这段goalng代码还能优化吗?
代码如下:
func main() {
currentTaskNumber := 0
maxTaskNumber := 3
yourJob := func(url string) {
defer func() {
currentTaskNumber--
}()
time.Sleep(time.Second * 5)
}
sites := []string{"1111", "2222", "3333"}
currentSiteIndex := 0
getUrl := func() string {
site := sites[currentSiteIndex]
if currentSiteIndex < (len(sites) - 1) {
currentSiteIndex++
}else {
currentSiteIndex = 0
}
return site
}
for true {
if currentTaskNumber < maxTaskNumber {
currentTaskNumber++
go yourJob(getUrl())
}
}
}
希望能指点一下,谢谢了
多go-routine运行的情况下,变量的使用一定要加锁 :blush:
这段代码什么作用,没看明白 ps:golang初学者
1 没考虑并发安全 2 for一直在空跑
我下面写的,考虑到了这两个问题:
我写了一个简版实现处理每个 site 任务, 所有代码没有实际跑起来只是在编辑器中按思路写了一下,希望能对你有启发。思路看代码应该还是很容易理解的。
主要优化有,将匿名函数变量用函数定义的方式书写。
使用 WaitGroup 做并发任务管理
如果您想要有 max 值做协程多少的管理,我觉得可以这样写: