//限制协程数量
func TestThreshold(t *testing.T) {
fileNames := []string{ //下载图片的数量
"192.168.1.1/image1",
"192.168.1.1/image2",
"192.168.1.1/image3",
"192.168.1.1/image4",
"192.168.1.1/image5",
}
maxConcurrent := 16
semaphore := make(chan struct{}, maxConcurrent)
var wg sync.WaitGroup
for _, fileName := range fileNames {
semaphore <- struct{}{}
wg.Add(1)
go Image(fileName, semaphore, &wg)
}
}
func Image(fileName string, semaphore chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
defer func() { <-semaphore }()
//下载文件,如果是共享文件可以上锁
}
maxConcurrent设置了并发任务的最大数量,
semaphore是一个用于控制并发访问的信号量,
wg是一个等待组
如果需要上锁的话可以在上面代码上加sync.Mutex锁
本文介绍了如何在Go语言中使用协程和信号量(semaphore)来控制`funcTestThreshold`中的文件下载并发数,确保`maxConcurrent`限制内进行,同时提及了使用`sync.WaitGroup`进行同步和潜在的加锁需求。

被折叠的 条评论
为什么被折叠?



