在golang中使用协程非常方便,如果有大量任务要处理,且任务间没有关联,可以并行同时处理的话,就非常适合用golang的协程处理。串行一个个执行需要的效率,远没有并行同时处理来的快,特别是当处理每个任务需要的时间越长,使用并行效果就越明显。


是的,golang就是利用多核cpu的云时代语言。


有些时候,golang起的协程特别多的话,机器的性能或其他服务组件会扛不住,比如服务器IO,数据库连接等,这时候需要主动控制协程并发数,避免服务崩溃。
下面是golang控制协程并发数的几种方法,很有意思。


代码实践:
方法一:使用有缓冲容量长度的channel控制


应用场景:适合知道任务数量,最简单的使用方式。



方法2:使用channel+waitGroup


应用场景:waitGroup开箱即用,不管任务数量是否提前清楚的情况下,都可以用,也很简单,少了次循环。


方法3:优雅使用waitGroup+channel+range


应用场景:这个处理方式最优雅,不仅控制了同时运行的只有10个协程,而且整个运行过程中只起了10个协程(当然不包括主协程),处理方式也很优雅,高效利用了channel 是否阻塞特点,最推荐这个。


如果有想要,对golang控制并发协程数量的优雅封装,欢迎私信我。


欢迎关注我的微信公众号:Redboy洗碗君,一个喜欢分享编程技巧,工具软件,记录生活思考的洗碗君。