渠道如何均匀分配到多个goroutine

时间:2015-12-19 01:07:58

标签: go

我有这个代码在任何给定时间上传最多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()

1 个答案:

答案 0 :(得分:0)

当您的示例中有单个频道的多个接收器时,将以随机顺序接收输入。