本文转载自微信公众号:labuladong
举个具体的例子,最近再往 B 站上搬运 YouTube 的优质算法视频,但是手动下载太麻烦,干脆直接写个并发程序给我打工算了。以下是非并发版本的 main 函数中的主要部分:
func main() {
urls := exec.GetUrls()
for i := 0; i < len(urls); i++ {
// 下载操作,较耗时
exec.DownloadVideos(urls[i])
}
}
这段代码应该很好理解,一个一个下载。但是我想最大化利用网速,改成并发。你可能想这样写:
func main() {
urls := exec.GetUrls()
for i := 0; i < len(urls); i++ {
go exec.DownloadVideos(urls[i])
}
}
不行,回想刚才 sleep 和 study 的例子,程序会瞬