c++定时器的原理与实现
1. 定时器解决了什么问题在项目中通常有诸如心跳机制、KEY到期机制等等这种任务周期性执行或者延迟执行的场景。所以 就需要定时器来实现这种周期任务或者延迟任务的执行。2. 如何实现定时器要实现定时器首先需要进行2个抉择用什么容器/数据结构 来存储延迟任务用什么机制来等待任务到期2.1 定时任务的存储结构可以用最小堆、红黑树、时间轮来存储定时任务如果用最小堆或者红黑树来存储定时任务的话就直接用epoch time作为key然后value就是定时任务。最小堆对应stl中的priority_queue容器但是不支持重复key以及随机删除一般用vector容器自己实现插入任务将任务放到数组的最末尾然后进行上浮操作堆大小弹出最近的任务将根节点弹出然后用末尾元素覆盖根节点元素然后进行下沉操作堆大小–删除任务如果想要支持删除最小堆中的任务需要维护一个hashmap记录任务id和数组下标的映射关系找到下标后用末尾元素覆盖下标对于元素然后进行下沉并上浮操作堆大小–最小堆的优点因为是数组所以cache友好。红黑树对应stl中的map/multimap容器一般用multimap因为支持重复的key红黑树的优点支持任意节点删除支持范围查询红黑树的缺点cache不友好而且需要存储父子节点和颜色信息。时间轮模拟时间转盘每一个槽位代表一个时间刻度(如1ms)插入任务时根据当前时间计算出任务多少时间后会触发直接将任务插入对应的槽位。时间轮的优点插入删除都是O(1)O(1)O(1)的复杂度性能好。时间轮的缺点如果刻度太大会导致精度损失如果刻度太小会导致占用太多内存如果实现多层时间轮的话比较复杂。2.2 等待定时任务到期的机制因为定时任务其实也是一个事件就需要和异步事件模型进行抽象统一所以可以用以下的机制来等待任务到期。timerfdselect/poll/epoll的超时参数iouring的io_uring_prep_timeout等待流程是计算距离当前时间 和 最快的定时任务的时间 的差值diff将diff填入上面几种机制的等待时间事件触发或者等待时间结束执行所有的过期任务

相关新闻

MyBatis-Plus06:IService接口Lambda基本用法

MyBatis-Plus06:IService接口Lambda基本用法

一、LambdaQuery 复杂查询LambdaQuery 用法:构建复杂查询;若是简单的根据id的增删改查,还是建议用IService中的xxxById()这类传统方法。示例:一般做法:要加很多if条件判断,很繁琐。使用LambdaQuery方法&…

2026/5/17 4:57:53 阅读更多 →
LLM大模型产品经理终极学习指南:2026全新版,普通产品经理需要学习大模型,转大模型产品经理!

LLM大模型产品经理终极学习指南:2026全新版,普通产品经理需要学习大模型,转大模型产品经理!

前言 随着人工智能技术的蓬勃发展,尤其是大模型(Large Model)的强势兴起,越来越多的企业对这一领域愈发重视并加大投入。作为大模型产品经理,需具备一系列跨学科的知识与技能,方能有效地推动产品的开发、优…

2026/5/17 4:57:51 阅读更多 →
细胞群体动力学仿真软件:NetLogo_(1).NetLogo软件介绍与安装

细胞群体动力学仿真软件:NetLogo_(1).NetLogo软件介绍与安装

NetLogo软件介绍与安装 软件介绍 NetLogo 是一个可编程的多主体建模环境,主要用于模拟复杂系统中的个体行为及其相互作用。它是由美国西北大学的 Uri Wilensky 开发的,最初是为教育目的设计的,但因其强大的功能和易用性,也被广泛…

2026/7/4 23:05:12 阅读更多 →

最新新闻

如何用Scan Tailor实现文档数字化的终极指南:让老旧扫描文档重获新生

如何用Scan Tailor实现文档数字化的终极指南:让老旧扫描文档重获新生

如何用Scan Tailor实现文档数字化的终极指南:让老旧扫描文档重获新生 【免费下载链接】scantailor 项目地址: https://gitcode.com/gh_mirrors/sc/scantailor 在数字化浪潮席卷全球的今天,你是否还在为堆积如山的老旧扫描文档而烦恼?…

2026/7/5 19:45:47 阅读更多 →
BLAST安全最佳实践:10个关键步骤保护你的AI浏览服务 [特殊字符]️

BLAST安全最佳实践:10个关键步骤保护你的AI浏览服务 [特殊字符]️

BLAST安全最佳实践:10个关键步骤保护你的AI浏览服务 🛡️ 【免费下载链接】blast Open-source VMs-as-a-service 项目地址: https://gitcode.com/gh_mirrors/blast14/blast 在当今AI技术快速发展的时代,BLAST作为开源的高性能Web浏览A…

2026/7/5 19:43:46 阅读更多 →
零基础AI换脸完全指南:roop-unleashed快速上手终极教程

零基础AI换脸完全指南:roop-unleashed快速上手终极教程

零基础AI换脸完全指南:roop-unleashed快速上手终极教程 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要体验电影级的AI换脸效果却担心技术门…

2026/7/5 19:41:46 阅读更多 →
免费压缩包密码恢复工具:3分钟找回遗忘密码的完整指南

免费压缩包密码恢复工具:3分钟找回遗忘密码的完整指南

免费压缩包密码恢复工具:3分钟找回遗忘密码的完整指南 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经因为忘记ZIP、…

2026/7/5 19:41:46 阅读更多 →
一站式音乐聚合方案:LX Music音源项目深度解析与实战指南

一站式音乐聚合方案:LX Music音源项目深度解析与实战指南

一站式音乐聚合方案:LX Music音源项目深度解析与实战指南 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否厌倦了在不同音乐应用间频繁切换?是否因为平台版权限制而无…

2026/7/5 19:37:45 阅读更多 →
Memcached Session Manager集群部署:大规模Web应用架构设计指南

Memcached Session Manager集群部署:大规模Web应用架构设计指南

Memcached Session Manager集群部署:大规模Web应用架构设计指南 【免费下载链接】memcached-session-manager A tomcat session manager that backups sessions in memcached and pulls them from there if asked for unknown sessions 项目地址: https://gitcode…

2026/7/5 19:37:45 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻