Goroutine池
目录:
问题提出
场景一
维持长链接,为每个长链接分配三个goroutine
- 一个负责读数据
- 一个负责写数据
- 一个负责维持心跳
高并发场景,goroutine
的数量会是连接数的三倍!
golang号称可以百万级别并发,但goroutine也不应该无限制的创建吧,毕竟每次都向系统申请内存,系统内存总有耗尽的一天。
无休止的开辟Goroutine依然会出现高频率的调度Groutine,那么依然会浪费很多上下文切换的资源,导致做无用功。所以设计一个Goroutine池限制Goroutine的开辟个数在大型并发场景还是必要的。
场景二
数据库查询模块,希望并发控制到40
- 如果请求少于40个请求那么就执行查询
- 1个查询完了就释放席位(也就是一共n个任务,1个查完了,那么还能再提交40-n+1个任务)
- 如果请求过多于40个就阻塞,直到有任务退出腾出席位