go-zero 如何应对海量定时/延迟任务?( 二 )
上面的过程可以简化成下面:
steps = d / intervalpos = step % numSlots - 1circle = (step - 1) / numSlots
总结
timingWheel
靠定时器推动 , 时间前进的同时会取出当前时间格中list
「双向链表」的task , 传递到execute
中执行 。 因为是是靠internal
固定时间刻度推进 , 可能就会出现:一个 60s 的task ,internal = 1s
, 这样就会空跑59次loop 。
- 而在扩展时间上 , 采取
circle
分层 , 这样就可以不断复用原有的numSlots
, 因为定时器在不断loop
, 而执行可以把上层的slot
下降到下层 , 在不断loop
中就可以执行到上层的task 。 这样的设计可以在不创造额外的数据结构 , 突破长时间的限制 。
go-zero
中还有很多实用的组件工具 , 用好工具对于提升服务性能和开发效率都有很大的帮助 , 希望本篇文章能给大家带来一些收获 。项目地址
【go-zero 如何应对海量定时/延迟任务?】好未来技术
推荐阅读
- 大一非计算机专业的学生,如何利用寒假自学C语言
- 红米K40渲染图曝光:居中挖孔+后置四摄,这外观你觉得如何?
- 奋斗|该如何看待拼多多员工猝死:鼓励奋斗,也要保护好奋斗者
- 装机点不亮 如何简易排查硬件问题?
- 虾米音乐宣布关停!我的歌单如何导入QQ音乐、网易云音乐?
- 人脸识别设备主板如何选型 软硬整合大幅缩短开发时间
- Mini-LED产品效果究竟如何?
- 专家介绍如何判断智能手机被入侵:运行速度变慢、电池消耗过快以及卡顿
- 最便宜的骁龙888手机?红米K40曝光:这外观如何?
- 广色域还不够 投影如何实现精准色彩还原?