后端开发【一大波有用知识】定时器方案红黑树,时间轮,最小堆

c/c++ linux后台开发学习笔记 3.2.3 定时器 定时器应用 心跳检测 技能冷却 倒计时 定时任务 超时机制 概述 服务器定时器两种实现: 网络时间和事件时间在一个线程中处理 epoll_wait时timeout设成最近一个定时器的时间 网络时间和事件时间在不同线程中处理 多开一个线程专门处理定时任务,没任务时调用sleep 接口设计 // 初始化定时器 void init_timer(); // 添加定时器 Node* add_timer(int expire, callback cb); // 删除定时器 bool del_time 阅读详情

目录:

  • 一、如何组织定时任务?

  • 定时器收网络IO处理造成误差特别大,该怎么处理?

  • 用何种数据机构存储定时器?

  • 红黑树如何解决相同时间的key值的?

  • 最小堆

  • 时间轮

  • 一个帮助理解单层级时间轮的例子

  • 如何解决空推进的问题?

  • 为什么多线程使用时间轮

  • 设计哪些接口,如何设计?

  • 满足哪些条件才能作为定时器的数据结构?

  • 二、定时的方法有哪些?

  • 究竟什么是定时?

  • 三、总结

一、如何组织定时任务?

首先,定时器组件通常和网络组件一起工作。举个最简单的例子来说:

int event=epoll_wait(epfd,ev,nev,timeout);
timeout作为参数值,<0为一直阻塞,=0相当于非阻塞检测双端队列就绪情况0代表立刻返回,>0数值表示最长阻塞的时间。在时间上需要应对的问题填入epoll_wait函数,就可以兼顾网络事件的处理和定时任务的处理。

定时器收网络IO处理造成误差特别大,该怎么处理?

  • nginx,redis中通过定时信号去处理+epoll_wait解决,nginx_timer_revolusion()函数定时发送时间信号会打断epoll_wait()的处理,让它尽快的处理定时事件,从而解决了误差较大的问题。很明显,如果网络IO处理事件时,会造成一定的误差。定时任务事件处理=epoll_wait处理时间+网络事件处理时间。

//第一种:通过发送定时信号去打断epoll_wa
深入Linux C/C++ Timer定时器的实现核心原理 我曾以为像定时器这样基础的功能,操作系统会有一个完备的实现。当需要开启一个定时任务的时候,会有一个优雅的、如下形式的接口: typedef void (*callback)(void*); void setTimeout(unsigned int second,callback cb,void* arg); 可是事与愿违,Linux下不存在这样的接口。文章相关视频讲解: 如何实现分布式定时器及核心原理:如何实现分布式定时器及核心原理 详解Linux网络编程相关的细节处理:详解Linux网络编程相 阅读详情

相关推荐

多线程环境下海量定时任务的定时器设计丨时间轮实现丨红黑树,跳表分析

多线程环境下海量定时任务定时器设计 1.定时器分析 2.红黑树,最小堆,跳表实现比较分析 3.时间轮实现 【Linux后端开发系列】多线程环境下海量定时任务的定时器设计丨时间轮实现丨红黑树,跳表分析 更多精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,Linux内核,Docker,TCP/IP,协程,DPDK多个高级知识点分享。 点击:https://ke.qq.com/course/417774?flowToke...

Linuxhus的博客 529

C/C++后端开发学习路线总结(附带实习学习经历分享)

以上就是做C/C++后端开发,从新手入门到工作所需要学习的内容整理了,可能并不全面,但掌握以上这些内容足以胜任大部分的岗位要求了。适宜工程师人群1.从事业务开发多年,对底层原理理解不够深入的在职工程师2.从事嵌入式方向开发,想转入互联网开发的在职工程师3.从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师4.从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师5.工作中技术没有挑战,工作中接触不到新技术的在职工程师。

m0_58687318的博客 8921

2023年C/C++Linux服务器开发/后台架构师知识体系整理(持续更新中)

C/C++Linux服务器开发/后台架构师知识体系1. 精进基石专栏1.1 数据结构与算法面试必聊的排序与KMP随处可见的红黑树磁盘存储链式的B树与B+树海量数据去重的Hash与布隆过滤器,bitmap图论算法,di jkstra,dfs,bfs,动态规划1.2 设计模式创建型设计模式结构型设计模式行为型设计模式1.3 工程管理手写:Makefile/cmake/configure操作:git/svn与持续集成Linux系统运行时参数命令2. 高性能网络设计专栏2.1 网络编程网络io与select,pol

C/C++Linux、音视频、DPDK 9457

C++后台开发学习路线

1.路线 一. 基础阶段 c/c++编程语言 linux基础 数据结构与算法 设计模式 脚本语言(可选) 二. 入门阶段 linux系统编程 linux网络编程 三. 进阶阶段 数据库mysql 分布式缓存redis 网络库 四. 项目实践阶段 编写简单FTP服务器 C++入门到精通Linux学习链接:零基础入门 C++Linux ​五. 高级阶段(可选) nginx z

Linuxhus的博客 8941

ANSYS APDL学习(6):ANSYS APDL部分命令流介绍

介绍APDL 部分命令流

娱乐至上的博客 1万+

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5728

智能枕头

睡觉和吃饭是一样重要的,一个人想要健康的体魄,不仅要饮食得当,更需要有一个好的睡眠质量。随着人们生活品质的提高,人们对于睡眠的要求越来越高,那么就非常需要一款舒适的枕头。为了适应市场的需求,我爱物联网推出了智能枕头。因为智能枕头可以给头部及颈椎一个良好的承托力,舒适、柔软、放松,让人更好的进入睡眠。 目录 一、智能枕头方案介绍 二、智能枕头的优点 三、智能枕头功能介绍 四、智能枕头APP开发 五、...

6108我爱物联网方案开发优快云博客 3660

新手必看:瑞萨MCU选型时,QFP、QFN、BGA这些封装到底该怎么选?(附选型避坑指南)

本文详细解析了瑞萨MCU选型中QFP、QFN、BGA等封装的特点与适用场景,提供实战避坑指南。通过对比封装的空间占用、散热能力、焊接难度等核心维度,帮助工程师根据具体需求选择最合适的芯片封装,避免因选型不当导致的高成本与生产问题。

weixin_26965807的博客 421

GSM的“时间管理大师”:TDMA时隙、突发脉冲与逻辑信道映射实战图解

本文深入解析GSM网络中的TDMA时隙调度与逻辑信道映射技术,揭示2G网络如何通过精密的时间管理和突发脉冲设计实现高效通信。从TDMA帧结构到GMSK调制优化,详细介绍了GSM的工程艺术及其在现代通信中的延续价值。

weixin_30631587的博客 514

亲友圈棋牌的逆向工程_棋牌透视分析研究(一)

透视也能实现,有些台子就自带控制,这种东西权限只是存在于平台运营者手中,即便逆向破解也很难发现,但也有那么一些棋牌 比如斗牛或者跑得快,会先发给你的内存中存放当前的牌的信息,这样你就可以知道对面的牌是什么,但肯定也是加密了。明明是zip却无法解压,这很明显是属于被加密了, 那么我们就要开始找他的加密内容,一般加密的秘钥都会存储在so里面。写这一篇文章了,其实也想了很久,最终还是决定写了, 有些朋友找我做过菠菜的逆向,bjl,甚至是足球的!但很遗憾的告诉大家,这里是找不到的。

m0_63368535的博客 5831

【Claude】API Error 通用错误:错误码含义与标准排查流程 bug报错已解决

Claude API 各类错误码速查与标准排查流程。

博客 8246

8、鼠疫流行过程的计算机建模介绍

本博文介绍了一种基于概率细胞自动机和蒙特卡罗方法的计算机模型,用于模拟由大沙鼠传播的鼠疫流行过程。结合GIS和遥感技术,该模型能够分析鼠疫在不同聚居地类型和季节变化下的传播特征,揭示了群落密度、分布及流行接触率对鼠疫传播的影响。研究还验证了模型与自然流行过程的一致性,并探讨了鼠疫在宿主数量低谷时的持续机制。模型为鼠疫防控和流行病研究提供了定量分析工具。

x2y3z4a5b的博客 107

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 后端开发【一大波有用知识】tcp/ip定时器与滑动窗口详解
下一篇: 手写实现分布式锁
Linux服务器开发
博客等级 码龄7年 610粉丝 589原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值