在go语言中分享几种常见控制goroutine数量的方法
Go  /  管理员 发布于 10个月前   560
在go语言中如何控制goroutine的数量呢?
可以使用一些机制来控制 Goroutine 的数量,以避免并发过高导致资源耗尽或性能下降的问题。
以下是几种常见的控制 Goroutine 数量的方法:
使用有缓冲的通道(Buffered Channel):
可以创建一个有限容量的通道,并在启动 Goroutine 之前将一定数量的令牌放入通道中。
每个 Goroutine 在执行之前需要从通道中获取一个令牌,当通道中没有令牌可用时,新的 Goroutine 将被阻塞。
这样可以限制并发执行的 Goroutine 数量。
使用 sync.WaitGroup:
sync.WaitGroup 是一个计数器,用于等待一组 Goroutine 完成任务。
可以通过调用 Add () 方法增加计数器值,在每个 Goroutine 完成任务后调用 Done () 方法减少计数器值。
主函数可以调用 Wait () 方法来等待所有计数器归零,从而控制并发执行的 Goroutine 数量。
使用线程池(Worker Pool):
可以创建一个固定大小的线程池,并将任务分配给池中的工作线程(即 Goroutine)。
通过限制线程池大小,可以控制同时执行任务的 Goroutine 数量。
第三方库资源库如:Jeffail/tunny 和 panjf2000/ants
https://github.com/Jeffail/tunny
https://github.com/panjf2000/ants
使用有限并发控制结构:
例如使用带有信号量或互斥锁等机制来限制并发执行的 Goroutine 数量。
可以通过控制信号量或互斥锁的状态来决定是否允许新的 Goroutine 执行。
调整系统资源的上限
ulimit 操作系统通常会限制同时打开文件数量、栈空间大小等,ulimit -a 可以看到系统当前的设置
虚拟内存 (virtual memory) 虚拟内存是在内存不足时,将磁盘映射为内存使用 如 linux 的 swap space
ps:
需要根据具体场景和需求选择适合的方法来控制 Goroutine 的数量。
通过合理地控制并发度,可以避免资源竞争、提高程序性能,并确保系统资源的有效利用。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号