关于chan的一些处理方式,请大家指点一下

1034992601 · · 866 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

业务场景如下: 我这里有很多的资源url, 要将他们都下载下来并处理,我将每个获取url资源的方法处理成异步go func(){}(), 它们每个处理完成了要把相应的数据返回给主goroutine, 开始时我用waitgroup能达到效果,但感觉有问题,如果url特别多时创建的goroutine特别多,因此我加一个chan去控制每次只能10条同时处理, 但一直报deadline, 这方面的高手帮忙指点下,怎么处理比较好,我的测试代码大概如下: ```golang package main import "fmt" func main() { msg := make(chan int) poolSize := make(chan bool, 10) for i := 1; i <= 100; i++ { doSomeThing(msg, poolSize, i) } for m := range msg { fmt.Println(m) } fmt.Println("end") } func doSomeThing(message chan<- int, poolSize chan bool, value int) { poolSize <- true defer func() { <-poolSize }() go func(message chan<- int, value int) { message <- value }(message, value) } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

866 次点击  
加入收藏 微博
1 回复  |  直到 2018-08-06 13:51:16
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传