go创建goroutine是否需要指定数量

func funcName(){
    //TODO
}
 for {
   if v,ok := <-chan;ok{
    go funcName()
   }else{
    break
   }
 }

假如chan管道中的数据长度为N,能否如上代码创建N个协程来处理。
还是需要像其他语言一下,创建指定数量的协程来处理。

阅读 2.8k
3 个回答
我的目标并不是创建N个协程,而是假设管道中有100w个数据,我能否直接创建100w个协程

这个,机器资源(比如内存)够就行。不够用了就得想办法限制。

够不够用,得实测 ...

可以,但不是协程越多越好.

go http 源包里面有如下结构

func (srv *Server) Serve(l net.Listener) error {
    defer l.Close()
    ...
    for {
        rw, e := l.Accept()
        ...
        go c.serve(ctx)
    }
}

详细:https://github.com/golang/go/...

在 Go 调度器加持下,每个新请求它就会开一个 goroutine 去处理,非常简单粗暴。但资源(cpu、memory)是有限的,适当的限制协程数量也不是不行的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题