【Fargo】3:使用libuv高精度定时器按照设定速率精准发送

uv_timer_start 每秒只能发送七百多个包

  • 您将定时器的间隔从 100ms 改为 1ms (uv_timer_start(&send_timer, send_packet, 0, 1)😉,理论上应该每秒发送约 1000 个包。如果2秒内收到1500多个包,而不是2000个包,这可能是由于以下原因:

系统性能瓶颈:

libuv 定时器的回调是基于事件循环的,如果系统忙于其他任务或者事件循环中有其他阻塞操作(如内存分配、I/O等待等),可能导致定时器的调用不如预期那么频繁。
定时器在设计时有一定的精度问题,尤其在低延迟情况下。1ms 的定时器精度不一定总能保证精确的1ms间隔,实际触发可能会有抖动。

网络拥塞:

如果您的网络环境存在带宽限制或延迟,UDP 包可能会由于网络拥堵而丢失。UDP 是不可靠传输协议,网络层不会重传丢失的包。
如果发送端速度过快,接收端或网络可能无法及时处理,导致包在网络中被丢弃。

操作系统调度:

在某些操作系统上,如果负载过高,操作系统调度的时间片可能无法精确到1ms,导致定时器触发频率低于预期。
内核缓冲区:

在高频率发送数据时,UDP 的发送缓冲区可能会填满,导致包丢失。可以通过增加 SO_SNDBUF(发送缓冲区)或 SO_RCVBUF(接收缓冲区)的大小来缓解这种情况。

重写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值