03.时间轮

时间轮

1.为什么需要时间轮

海量的定时任务下,小顶堆时间复杂度比较高,性能差

2.时间轮是什么

时间轮这个技术其实出来很久了,在kafka、zookeeper、Netty、Dubbo等高性能组件中都有时间轮使用的方式

时间轮,从图片上来看,就和手表的表圈是一样,所以称为时间轮

时间轮是一种逻辑存储结构再配合线程可以完成高效的进行批量化调度的一种调度模型

在这里插入图片描述

3.时间轮的基本概念

在这里插入图片描述
在这里插入图片描述

概念总览

  • wheelSize:总块数
  • tickMs:每块对应的时间间隔
  • currentTime:当前所处时间,类似于钟表的指针,一般被设计为一个线程根据时间不断指向各个时间间隔
  • task:定时任务或延时任务

存储结构

时间轮本身是一种逻辑结构,一般采用数组作为实际存储结构

4.时间轮的时间间隔问题

背景

比如周一上午9点执行一个定时任务,周三下午9点执行一个定时任务,时间间隔多长合适?

解决方案

可以定义以1小时为间隔,一共一周168小时,第9小时就是周一商务九点,第57小时就是周三上午9点

结论

也就是说时间间隔要根据需求来设置不是一成不变的

问题

  1. 时间轮有168个格子,但是只有两个定时任务能分别用到9与57号格子这对于空间来说很浪费
  2. 线程在轮询所有格子的时候,只有9与57号格子有任务,这很浪费CPU。没有任务的时候去Thread.sleep

5.时间轮刻度不够用问题

背景

比如我有个任务,需要每周一上午九点执行

解决方案总览

  • 增大时间轮的刻度
  • 列表中的任务中添加round属性
  • 分层时间轮

增大时间轮的刻度

介绍

一个刻度一小时, 一天24个小时,一周168个小时,一年8760小时,为了解决时间刻度不够用的问题我可以把时间轮的刻度(槽)增加到8760个

很明显这样的设计是不行的

缺点
  • 时间刻度太多会, 导致时间轮走到的多数刻度没有任务执行,比如一个月就2个任务,我得移动720次,其中718次是无用功
  • 时间刻度太多会导致存储空间变大,利用率变低,比如一个月就2个任务,我得需要大小是720的数组,如果我的执行时间的粒度精确到秒,那就更恐怖了
解决方案
  • round时间轮:典型的是现实是Netty里面的
  • 分层时间轮:典型实现是Kafka里面的

6.round时间轮

图示round时间轮

在这里插入图片描述

缺点

  • 时间轮每次都需要遍历任务列表,耗时增加,当时间轮刻度粒度很小(秒级甚至毫秒级)
  • 任务列表又特别长时,这种遍历的办法是不可接受的

7.分层时间轮

思想

  • 针对时间复杂度的问题:不做遍历计算round,凡是任务列表中的任务,都应该被执行的,直接全部取出来执行
  • 针对空间复杂度的问题:分层,每个时间粒度对应一个时间轮,多个时间轮之间进行级联协作

图示分层时间轮

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/339602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自定义数据集 - Dataset

文章目录 1. PASCAL VOC格式 划分训练集和验证集2. 自定义dataset 1. PASCAL VOC格式 划分训练集和验证集 import os import randomdef main():random.seed(0) # 设置随机种子,保证随机结果可复现files_path "./VOCdevkit/VOC2012/Annotations" # 指定…

Sentinel限流规则支持流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种: 1.快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。 2.warm up:预热模式,对超出阈值的请求同样是拒绝并抛…

网络安全的信息收集方法有哪些?

网络安全攻击中的信息收集是攻击者为了了解目标系统的弱点、配置、环境和潜在的防御措施而进行的活动。以下是一些常见的信息收集手段: 开放网络资源查询: 使用搜索引擎查找关于目标组织的信息,包括新闻稿、社交媒体帖子、官方网站等。通过W…

答案之书程序

答案之书程序 需求:用户输入手机号码后4位或者生日,自动生成答案之书对应答案 效果图 C#代码实现过程 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;…

新买电脑配置不低却卡顿?

目录 前言: 电脑卡顿的原因 Windows 10必做的系统优化 禁用 IP Helper 关闭系统通知 机械硬盘开启优化驱动器功能 开启存储感知 前言: 新买的电脑配置不低,但却卡顿甚至程序不反应,这是怎么回事儿? 其实并不…

获取主流电商平台商品价格,库存信息,数据分析,SKU详情

要接入API接口以采集电商平台上的商品数据,可以按照以下步骤进行: 1、找到可用的API接口:首先,需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥&#x…

【代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合】

代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合 回溯算法的理论基础77. 组合 回溯算法的理论基础 这里我觉得《代码随想录》和y总的课都比较好了 《代码随想录》 : https://programmercarl.com/0077.%E7%BB%84%E5%90%88%E4%BC%98%E5%8C%96.html#%E5…

成人高考和自考到底应该选哪个呢?

在成人学历提升的各项方式之中 成人高考与自学考试经常会被人拿来对比 但它们之间的差别在哪里 又分别去适合什么类型的考生 成考自考报名一般8月底开始,要准备考试的考生需要提前做好准备了哦 成考自考报名都需要上传证件照,而且都很严格 大家可使用小程…

react 页签(自行封装)

思路:封装一个页签组件,包裹页面组件,页面渲染之后把数据缓存到全局状态实现页面缓存。 浏览本博客之前先看一下我的博客实现的功能是否满足需求,实现功能: - 页面缓存 - 关闭当前页 - 鼠标右键>关闭当前 - 鼠标右…

启发式教学是什么

学生们在上课时看似认真听讲,但是在下课后却一片茫然,不知道你讲了什么内容?这是因为你可能使用了传统的教学方法,而不是启发式教学。 启发式教学是指老师在教育教学中,采用引导、启示、激发等手段,调动学…

主板电路学习; 华硕ASUS K43SD笔记本安装win7X64(ventoy)

记录 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 K43SD 安装 win7X64 ) 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 (常规安装) 设置: 禁用UEFI 启用AHCI ventoy制作MBR(非UEFI&#…

安全防御-基础认知

目录 安全风险能见度不足: 常见的网络安全术语 : 常见安全风险 网络的基本攻击模式: 病毒分类: 病毒的特征: 常见病毒: 信息安全的五要素: 信息安全的五要素案例 网络空间&#xff1a…

Anything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答

QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答 QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。…

Vue diff原理

✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…

DAY15--learning English

一、积累 1.loyalty Bro had loyalty on that. 老兄对那个东西情有独钟。 2. consent its illegal to film anyone without consent in many country 。 在一些国家里面,没有经过别人的同意就去拍摄别人是违法的。 3. butt 4.disciplinary Welcome to our discip…

Django(九)

1. 用户登录-Cookie和Session 什么是cookie和session? 发送HTTP请求或者HTTPS请求(无状态&短连接) http://127.0.0.1:8000/admin/list/ https://127.0.0.1:8000/admin/list/http无状态短连接:一次请求响应之后断开连接,再发请求重新连…

CentOS 系统创建网卡bond0

很多时候在机房运维的过程中,我们会遇到客户要求的建立网卡光口的bond0设置,通俗点说就是将两个光口合并为一个口进行链接设置。创建这个设置是有两种设置,一是在安装系统的过程中对bond0进行创建设置,另一种就是通过系统里面对网…

C波段数据链和DAA技术实现BVLOS超视距飞行-乔克托族BEYOND计划获得FAA扩大批准

俄克拉荷马州的乔克托族(CNO)超越计划宣布,已从联邦航空管理局(FAA)获得了扩大的超视距(BVLOS)操作豁免的批准。这扩展了原有的豁免范围,覆盖约43英里长的区域,包括CNO医疗诊所、CNO新兴航空技术中心测试场以及其他设施。这是目前美国境内同类…

文件上传笔记整理

文件上传 web渗透的核心,内网渗透的基础 通过上传webshell文件到对方的服务器来获得对方服务器的控制权 成功条件 文件成功上传到对方的服务器(躲过杀软) 知道文件上传的具体路径 上传的文件可以执行成功 文件上传的流程 前端JS对上传文件进行…

美易官方《投资抄底5年期美债?》

摩根士丹利和摩根大通近期发布报告,建议投资者抄底5年期美债。这两家知名投行认为,当前5年期美债收益率已经处于历史低位,而经济复苏和通胀预期将使得债券价格上涨。 摩根士丹利预计,美国国债有反弹的空间,预计未来几…