什么是时间轮_轮转时间片

什么是时间轮_轮转时间片在上一篇文章中我们讲解了空闲检测机制的由来, `Netty`对应的心跳实现以及源码查看, 本次主要讲解什么是时间轮

「我正在参与掘金会员专属活动-源码共读第一期,点击参与

前言

在上一篇文章中我们讲解了空闲检测机制的由来, Netty对应的心跳实现以及源码查看, 本次主要讲解什么是时间轮

这是我的Netty专栏 欢迎大家关注

时间轮

时间轮是一种实现延迟功能的算法, 它在Linux内核中使用广泛, 是Linux内核定时器的实现方法和基础之一.

时间轮是一种高效来利用线程资源来进行批量化调度的一种调度模型, 把大量的调度任务全部绑定到同一个调度器上, 利用这个调度器来进行所有任务的管理, 触发以及运行.

单层时间轮

image.png

图片来源于网络

时间轮的创意来自于生活中的时钟, 在时间轮机制中有时间槽和时间轮的概念, 对应的分别是时钟的刻度和时针跳动的一个周期, 当有新任务产生的时候, 会将任务放置到对应的时间槽内, 每过一个时间周期就会执行下一个时间槽内的任务

image.png

图片来源于网络

多层时间轮

但是在上述时间轮也有一些缺点, 假设每个时间周期是 1s, 时间轮共有六十个节点, 那么当我设置一个任务为 70s 之后执行的话会在 10s(70 % 60) 后执行, 这显然不符合我们的预期

所以在时间爱轮中还有一个参数 round, 用来记录几圈之后执行

当我们解决了时间轮圈数问题之后就会发现, 只有当一个任务的 round 为 0 才会执行该任务, 那么就会造成时间轮的空转问题, 还是上面刻度为 60 的时间轮, 假设一个任务在 600s 后执行, 则该任务的执行刻度为 0s, round 为 10, 时间轮空转 10 圈才会执行该任务, 造成了大量资源的浪费, 于是多层时间轮应运而生

image.png

图片来源于网络

如图所示, 第一层时间跨度为 1ms, 第二层时间跨度为 20ms, 第三层时间跨度为 400ms, 当任务为 501ms 执行的时候, 会先记录在 刻度为 1(501/400) 的地方, 当执行到 1 时, 余下的 101(501-400) 会进入第二层的 1(101/20) 刻度, 同时 round == 5, 代表五圈后的 1 刻度, 执行完第二层之后, 还余 1 会进入第三层的 1 刻度, 至此才算是结束

使用场景

kafka , Netty, Zookeeper 等高并发的一般都有时间轮的实现

Netty系统为例, 在其中是会存在大量连接的, 在每个连接中都存在相应的事件任务, 而大量的事件任务如果每一个任务都启动一个timer调度器来管理任务的生命周期的话, 会造成CPU的资源浪费且低效, 于是HashedWheelTimer应运而生, HashedWheelTimer就是以时间轮为基础进行设计的

参考

浅析时间轮 – 掘金 (juejin.cn)

本文内容到此结束了

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

我是 宁轩 , 我们下次再见

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13721.html

(0)

相关推荐

  • 使用pytesseract进行OCR文字识别

    使用pytesseract进行OCR文字识别在现代社会中,数字化技术的发展使得人们变得更加依赖于电子设备。电子设备和软件可以协助人们进行工作和生活,但有时文字是从纸质文件或图片中传递而来的。当需要处理这些文件的时候,OCR(光学字符识别)变得非常有用。OCR技术可以帮助电脑将图片中的文字识别并转为可编辑或其他格式的文本,同时也可以帮助人们对纸质文件进行数字化处理。Python作为一门流行的编程语言,提供了几种OCR系统,其中最受欢迎的就是Pytesseract。

    2024-06-29
    39
  • RMAN 下NOARCHIVELOG和ARCHIVE模式的恢复「建议收藏」

    RMAN 下NOARCHIVELOG和ARCHIVE模式的恢复「建议收藏」恢复处于NOARCHIVELOG模式的数据库 当数据库处于NOARCHIVELOG模式时,如果出现介质故障 ,则最后一次备份之后对数据库所做的任何操作都将丢失。通过RMAN执行恢复时,只需要执行res

    2022-12-27
    138
  • Tomcat 中 db.properties 无法找到「建议收藏」

    Tomcat 中 db.properties 无法找到「建议收藏」java项目中可以找到db.properties文件,但使用Tomcat的web项目中却无法找到文件。 可以尝试以下解决方案。 确保web项目中目录WEB-INF/classes下生成了db.pro…

    2023-03-28
    143
  • 2019年Java面试题基础系列228道(5),快看看哪些你还不会?

    2019年Java面试题基础系列228道(5),快看看哪些你还不会?23、不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。 比如你的ABC分别对应动物,猫,黑猫。 你把c转型为B,黑猫是猫吗?是啊,所以这是ok的。 这就不ok了,只知道这个b是一只猫,他不一定是黑猫。 这里的b本来就是黑…

    2023-07-25
    122
  • 按8小时制计算的工作时长统计函数[通俗易懂]

    按8小时制计算的工作时长统计函数[通俗易懂]按8小时制计算的工作时长统计函数

    2023-04-22
    158
  • MySQL Explain 详解(优化MySQL性能第一步)「建议收藏」

    MySQL Explain 详解(优化MySQL性能第一步)「建议收藏」MySQL Explain 详解 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句。分析你的查询预付或表结构的性能瓶颈。 查询结果返回字段分析 1…

    2023-03-22
    145
  • 高性能图计算系统 Plato 在 Nebula Graph 中的实践

    高性能图计算系统 Plato 在 Nebula Graph 中的实践本文首发于 Nebula Graph Community 公众号 1.图计算介绍 1.1 图数据库 vs 图计算 图数据库是面向 OLTP 场景,强调增删改查,并且一个查询往往只涉及到全图中的少量数据

    2023-05-07
    114
  • 轻听变色之谜

    轻听变色之谜Style和Theme主要用来实现白天模式和夜间模式。   一个Style是一系列属性的集合,用来指定View或者Window的外观和格式。它可以指定的属性包括高度, Padding, 文字颜色,文字尺寸,背景颜色等等。

    2023-07-31
    123

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注