高效的定时器算法

2024-02-14

实现简单计时器库的最佳算法是什么?图书馆应允许以下内容:

  1. 定时器要启动
  2. 定时器要停止
  3. 检查计时器是否仍在运行

定时器到期时,将调用回调函数。

定时器模块将允许定时器具有 Ns 的时间分辨率,并且每 Ns 应该给模块一次踢动,以提示模块检查过期的定时器。

许多定时器可以同时激活。

最好的算法需要满足以下目标

  1. 在处理计时器到期回调时对启动/停止计时器具有鲁棒性
  2. 允许快速启动、停止和检查计时器
  3. 内存占用小

Regards


我见过的最好的计时器算法是研究论文中发现的计时器轮散列和分层计时轮:用于高效实现计时器设施的数据结构 http://www.cs.columbia.edu/~nahum/w6998/papers/sosp87-timing-wheels.pdf

我知道 Java 中有 Netty、JBoss 的实现,并且我确信如果您使用 Java 编写,您也可以在其他地方使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效的定时器算法 的相关文章

  • 优化 HTML 属性压缩顺序

    我在某处读到 按一定顺序组织 HTML 属性可以提高 HTML 文档的压缩率 我想我是从 Google 或 Yahoo 推荐的更快网站上读到这篇文章的 如果我没记错的话 建议是将最常见的属性放在第一位 例如id等 然后将其余的按字母顺序排列
  • 找到质数?

    为了判断 N 是否是质数 我们只需要查找所有小于或等于 sqrt N 的数字 这是为什么 我正在编写 C 代码 因此试图理解其背后的原因 如果 N 是一个正整数 且能被两个正整数 1 和 N 整除 则 N 是素数 由于数字的约数不能大于该数
  • 如何返回 Solidity 中的结构数组?

    我正在为以太坊智能合约设计一个解决方案bidding 用例包括保留名称 例如 myName 并分配给一个地址 然后 人们可以竞标该名称 在本例中为 myName 可以有多个名称发生多次此类出价 struct Bid address bidO
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 为什么《破解编码面试》这个例子的时间复杂度是O(k c^k)?

    该问题来自 破解编码面试 第 6 版 问题 V1 11 以下代码打印长度为 k 的所有字符串 其中字符 是按排序顺序排列的 它通过生成所有长度的字符串来做到这一点 k 然后检查每个是否已排序 什么是运行时间 package QVI 11 P
  • 如何在单向链表(一次遍历中)中从尾部获取第 n 个节点?

    所以我在一次考试中得到了这个问题 如何从单链表的尾部获取第 n 个节点 每个节点都有一个值和一个下一个 指向下一个值的指针 我们得到这个 getNodeFromTail Node head int x 所以我的做法是通过遍历一次来求出列表的
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公
  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia

随机推荐

  • 在 C/C++ 中读/写半字节(无位字段)

    有没有一种简单的方法可以在不使用位字段的情况下读取 写入字节中的半字节 我总是需要读取两个半字节 但需要单独写入每个半字节 Thanks 使用面膜 char byte byte byte 0xF0 nibble1 0xF write low
  • 限制 WAMP 文件系统访问

    我的 PC 上安装了 WAMP 堆栈 昨天 我正在使用 PHP 处理文件系统 并注意到我可以访问硬盘中的任何目录 甚至可以访问网站文档根目录之上的目录 这是一个我想避免的明显的安全问题 目前 我在 WAMP 堆栈中使用多个虚拟主机以及使用主
  • 使用 -deprecation 运行 SBT

    我的 project build scala 文件中似乎有警告 不在我的 Scala 项目中 如何配置 SBT 来运行 deprecation flag Does not help so do not suggest it scalacOp
  • PHP Curl 输出缓冲区未收到响应

    我有一个协议 其中 file1 phpcurl 运行 file2 php file2 php 是一个长时间运行的文件 但它发送 或应该发送 一个响应回 file1 php 然后继续执行它的代码 我正在使用输出缓冲区来尝试发送此数据 但问题是
  • 列出 COMobject 中的所有方法

    是否可以 内容如下 import win32com client ProgID someProgramID com object win32com client Dispatch ProgID for methods in com obje
  • 如何使用 jQuery 在选择框中显示 JSON 数据?

    这是我的 JSON 数据 ACT Australian Capital Territory NSW New South Wales NT Northern Territory QLD Queensland SA South Australi
  • 列表列表的总和

    我正在寻找 python 中的方法来对仅包含整数的列表进行求和 我看到了这个方法sum 仅适用于列表 不适用于列表的列表 有什么适合我的吗 谢谢 您可以使用sum 这里有一个生成器表达式 In 18 lis 1 2 3 4 5 6 In 1
  • SELECT 语句中表达式的执行顺序

    我想知道表达式的执行顺序SELECT声明总是发生于左到右 SET a 0 SELECT a AS first a a 1 AS second a a 1 AS third a a 1 AS fourth a a 1 AS fifth a a
  • Qt Creator 代码编辑期间 CPU 为 100%

    我有 Qt Creator 项目 它用boost and Point Cloud library 当我编辑包含这些库中的内容的文件时 Qt Creator 在每次代码更改 添加行 更改变量类型等 后挂起大约 30 秒 TaskManager
  • “AsyncThunkAction”类型的参数不可分配给“AnyAction”类型的参数

    store ts export const store configureStore reducer auth authReducer middleware export type AppDispatch typeof store disp
  • git 子模块 Visual Studio 2017 未下载

    我们已经开始利用git submodules作为跨项目重用公共代码的一种方式 我们在工作中有一个简单的规则 当人们get你的代码应该build第一次 您的代码应该建立在可视化在线基础上 而不需要太多麻烦 如果我通过添加共享代码git sub
  • 使用 React + Flux 时,操作或存储是否应该负责转换数据?

    使用 React 和 Flux 时 标准做法是从操作中进行 API 调用 然后将结果数据存储在 Store 类中 但是 谁应该负责存储数据后对其进行转换呢 示例 我有一个EntryStore保存代表购物清单项目的对象 我有许多可以应用于它们
  • 如何在 Android 中使用设备管理员应用程序阻止安装其他应用程序

    如何使用 Android 中的设备管理员应用程序阻止安装其他应用程序 我们如何对其进行编码以限制使用设备管理应用程序安装应用程序 请帮帮我 据我所知 对于 ICS
  • 推送到heroku的应用程序仍然显示标准索引页面

    我完成了安装 git 和 heroku gem 的步骤 并成功将我的应用程序推送到了 heroku 问题是 它显示了一个标准的 You re Riding Ruby on Rails 页面 即使我的本地应用程序已将路由设置为根到某个控制器
  • 如何查看查询中的参数?

    为了调试我的代码 我想查看执行的显式 sql 查询 我创建查询createQueryBuilder 我实现的最明确的事情是使用以下原始查询 qb gt getQuery gt getSQL 问题是我看到的不是参数 而是持有者 我在网上找到了
  • 使用 awk 打印文件中的重复行

    我需要打印文件中的所有重复行uniq D选项不支持 所以我正在考虑使用 awk 打印重复行的另一种方法 我知道 我们在 awk 中有一个选项 如下所示 测试文件 txt apple apple orange orange cherry ch
  • 如何在 ASCII 表中以科学记数法显示数字?

    我试图在 ASCII 表中显示极小的数字 library stargazer example lt data frame parameter letters value runif 26 min 1E 14 max 5E 14 starga
  • kafka 主题中的唯一消息检查

    我们使用 Logstash 希望从 Oracle 数据库读取一张表并将这些消息 如下所示 发送到 Kafka Topic1 message1 name name 1 id fbd89256 12gh 10og etdgn1234njF si
  • “python3 -u”是什么意思?

    从命令行运行 Python 文件时 您可以使用python3
  • 高效的定时器算法

    实现简单计时器库的最佳算法是什么 图书馆应允许以下内容 定时器要启动 定时器要停止 检查计时器是否仍在运行 定时器到期时 将调用回调函数 定时器模块将允许定时器具有 Ns 的时间分辨率 并且每 Ns 应该给模块一次踢动 以提示模块检查过期的