如图,我们同时开启非常多的协程,过了一会,他报错了
协程过多报错的原因主要有三种:
1.文件打开数限制
2.内存限制
3.调度开销过大(也就是调度的时间比你协程运行的时间还多)
那么我们该怎么解决这种问题呢?主要有一下几种方案:
1.优化业务逻辑
2.利用channel缓存区
将代码修改成上图,这样同时也就只能有3000个协程存在。
3.协程池
不过这边并不推荐协程池,因为GMP模型就已经是个线程池了,再用协程池就是二级池化,会增加系统的复杂度,而且go语言的初衷就是希望协程即用即毁,不要池化。
4.调整系统资源