如何保证golang的协程可控-协程管理器

本文介绍了如何设计一个Golang协程管理器来确保协程的可控性,包括唯一命名、运行状态监控、异常捕获与恢复、风险预警以及日志追溯。通过管理器和统一的协程接口,可以实现协程的生命周期管理和异常处理,从而提高程序的稳定性和可维护性。
摘要由CSDN通过智能技术生成

设计目的
研发过程和实际使用中发现golang中开启协程很容易,但是管理起来很麻烦,无法有效检测协程内容运行情况,协程崩溃,协程使用的chan阻塞情况,并且无限制增长的协程会为程序带来风险
经过之前讨论golang的协程需要管理的要点,总结为以下几点:
1. 每个协程需要有唯一的命名
2. 定时输出每个协程使用的chan的使用情况,并且确认数据是在流动的
3. 除特殊协程外(玩家链接协程属于特殊协程),协程必须要有合适的崩溃捕捉,在其崩溃后能够迅速恢复
4. 定时对协程的运行情况进行采集,对于有风险的协程及时发出告警
5. 能够通过日志有效追溯协程出现问题的原因
 
设计思路
为协程抽象一个接口和一个统一管理器,所有协程都需要实现统一接口和委托管理器来进行管理。达到统一实现以上设计目的
管理器设计:
1. 管理器需要在协程被加入管理器时启动协程
2. 管理器需要在协程被移除管理器时停止协程
3. 管理器需要为协程进行唯一编号,方便协程打印状态时区分
4. 管理器需要保证停止时统一安全停止所有协程
5. 管理器需要保证协程异常停止时打印堆栈信息
6. 管理器需要保证协程异常停止时,有重新拉起协程的能力
 
协程接口设计:
1. 需要实现协程运行的主逻辑
2. 需要有打印运行状态的接口
3. 需要在协程退出时进行析构
设计说明
管理器添加协程方法,协程添加进管理器后启动协程
func (manager *ThreadManager) StartThread(thread Thread)
 
管理器移除协程方法,协程从管理器中移除协程时需要同时停止协程
func (manager *ThreadManager) StartThread(thread Thread)
 
管理器提供了统一创建协程基类的方法,为管理的协程统一进行编号
func (manager *ThreadManager) NewBas

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值