Golang 开发需要协程池吗?【】

协程池的核心是控制协程数量,对于简单需求不一定需要协程池,反而让程序复杂了,增加不透明度。几种典型场景

1.简单的可以直接起固定个数协程处理

  • 优点是简单,不复杂的并发任务这样简单处理即可。
  • 缺点在于dataChan可能流量不不均衡,需要同时处理的任务多少在变动,但是对应的协程数量保持不变,要不就是任务处理堵塞要不就是存在多余的协程空闲
// runBoundedTask 起maxTaskNum个协程共同处理任务
func runBoundedTask(dataChan 

2.复杂点的可以基于Semaphore动态调整处理任务的协程数

针对固定个数协程的缺点,一个思路是协程数量最好能够根据来的处理任务的多少,动态变更,指定一个并发上限,任务多时增加协程数量,任务少时减少协程数量

// runSemaphoreTask 
// 最大同时运行maxTaskNum个任务处理数据
// 使用信号量维持maxTaskNum个信号
func runSemaphoreTask(dataChan 

3.终极方案直接上协程池

针对复杂业务,可以直接上协程池。

常用协程池github.com/panjf2000/an,如下实现。

// runGoroutinePoolTask 使用协程池动态管理协程数量
func runGoroutinePoolTask(dataChan 

更多细节参考

文章来源于互联网:Golang 开发需要协程池吗?

打赏 赞(0) 分享'
分享到...
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

文章目录