如图,我们同时开启非常多的协程,过了一会,他报错了 

协程过多报错的原因主要有三种:

1.文件打开数限制

2.内存限制

3.调度开销过大(也就是调度的时间比你协程运行的时间还多)

        那么我们该怎么解决这种问题呢?主要有一下几种方案:

1.优化业务逻辑

2.利用channel缓存区

 将代码修改成上图,这样同时也就只能有3000个协程存在。

3.协程池

不过这边并不推荐协程池,因为GMP模型就已经是个线程池了,再用协程池就是二级池化,会增加系统的复杂度,而且go语言的初衷就是希望协程即用即毁,不要池化。

4.调整系统资源