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

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

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

阅读 667
评论
    3 个回答
    • 9.3k
    我的目标并不是创建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)是有限的,适当的限制协程数量也不是不行的。

          撰写回答

          登录后参与交流、获取后续更新提醒