golang:使用timingwheel进行大量ticker的优化

在处理大量socket连接的Golang服务器中,为了检测连接状态,通常使用Ticker进行定时检测。然而,当连接数量达到10w+时,CPU占用率高达30%。为了解决这个问题,引入了基于channel的Close广播机制和TimingWheel实现高效的超时通知。通过创建一个1s间隔的TimingWheel,仅使用3600个channel,将CPU开销降低到10%以下,显著提升了性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ticker

最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。

通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established。而实际上该socket已经不可用了。

为了判断连接是否可用,通常我们会用timer机制来定时检测,在go里面,这非常容易实现,如下:


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值