1.首先得知道,GOMAXPROCS指的是GMP调度模型中M的数量,一般情况下是和cpu的核数一致,可以显示的调用runtime.GOMAXPROCS来设置为最大的cpu核数,但是如果不调用,自动也会设置为这个值。
所以GOMAXPROCS并不能设置最大并发的goroutine的数量
2. goroutine的数量也不能无限制的变多,因为无限新增的话会耗尽资源。所以怎么解决呢?
需要用协程池,但实际上协程池也是用channel来实现的。每次新增goroutine的时候写入channel,当channel里面塞满的时候就阻塞了。具体实现参考:go语言限制Goroutine数量 - Go语言中文网 - Golang中文社区