//限制协程数量
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锁