我有这个代码在任何给定时间上传最多30个文件(可能有数千个文件需要上传)。一切都像我想要的那样工作:goroutines从任务中获取文件,上传它,然后上传到下一个文件。
我的问题是:为什么goroutines上传相同的文件?我已对此进行了测试,似乎文件永远不会上传两次。频道是在循环吗?
tasks := make(chan string, 10000)
var wg sync.WaitGroup
// create a limited number of routines
routineLimit := 30
for i := 0; i < routineLimit; i++ {
wg.Add(1)
go func() {
// check to see if there is a new task
for file := range tasks {
Upload(file) // upload the file
}
wg.Done()
}()
}
// get the files
files := GetFilePaths()
for _, file := range(files) {
// add the file to the queue of tasks
tasks <- file
}
wg.Wait()
答案 0 :(得分:0)
当您的示例中有单个频道的多个接收器时,将以随机顺序接收输入。