golang 实现一个通用协程池

golang 是一门很优秀的语言,语法简单,功能强大 ,支持的 channal、goroutine 等都是非常优秀的特性。由于之前用golang 重构一个项目,对golang不是太了解,栽了不少坑,其中主要问题为:

1. go 直接协程运行函数、方法,大并发的时候不太可控会导致协程数量急剧增加。

2.协程池方式运行有不想每一个结构体都启动一个协程池

所以就萌生出搞一个通用协程池的想法,主要思想为,启动多个协程 从 channal 队列读取数据,由业务将需要执行的方法与参数放入channal,协程池仅仅负责维护协程,自动扩容,缩减,启用备用队列等策略,至于返回结果之类的都有业务方实现。

关键实现:

1. 定义一个task 的结构体 标示具体要执行的任务格式

2.定义一个worker 池,控制协程相关信息

3.实现协程池相关启动,停止,扩容策略,缩减策略,备用队列启用等 逻辑

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年4月9日
下一篇 2018年4月10日

相关推荐