当前位置: 首页 > news >正文

做一个能注册用户的网站空间设计师工资一般多少

做一个能注册用户的网站,空间设计师工资一般多少,app广告推广,乡下自家院子设计图片Kafka存在大量的延迟操作,比如延迟删除、延迟拉取等。Kafka基于时间轮概念自定义了一个用于延迟操作的定时器。 JDK自带的Timer和DelayQueue缺陷 Timer和DelayQueue都可以插入多个定时任务,它们都使用一个优先级队列来管理任务,复杂度为O(l…

Kafka存在大量的延迟操作,比如延迟删除、延迟拉取等。Kafka基于时间轮概念自定义了一个用于延迟操作的定时器。

JDK自带的Timer和DelayQueue缺陷

Timer和DelayQueue都可以插入多个定时任务,它们都使用一个优先级队列来管理任务,复杂度为O(logn)。

Timer

单线程,前置任务会阻塞后置任务,如果任务抛出异常,Timer会中断停止。

DelayQueue

线程安全,可用于多线程,是一个无界阻塞队列。

表 Timer和DelayQueue的对比

public static void main(String[] args) throws InterruptedException {DelayQueue<DelayQueueTask> delayQueue = new DelayQueue<>();delayQueue.offer(new DelayQueueTask("task1",5000));delayQueue.offer(new DelayQueueTask("task2",2000));delayQueue.offer(new DelayQueueTask("task3",4000));System.out.println("开始执行delayQueue任务");while (!delayQueue.isEmpty()) {DelayQueueTask task = delayQueue.take();System.out.println("任务:" + task);}System.out.println("delayQueue任务 任务执行完毕");
}

时间轮结构

任务插入及删除O(logn)的复杂度不能满足Kafka高性能要求。时间轮时间复杂度为O(1)。

      图 时间轮(TimingWheel)结构

时间轮类似于机械手表,秒针1s前进一次,分针在秒针前进一圈后前进1格。。

tick

时间跨度。上图第一层tick=1s,第二次tick=10s。

wheelSize

时间格数。每一层格数一样。每层时间周期interval=tick*wheelSize

currentTick

每层当前指向的时间格。

bucket

桶,每个时间格中用于保存待执行任务的列表(TimerTaskList)。

表 时间轮中的基本概念

// 时间轮添加任务的伪代码:HashedWheelTimer 的 addTask 方法
public void addTask(TimerTask task, long delayMs) {if (delayMs < current.interval) {// 插入当前层int bucketIndex = (currentTick + delayMs / current.tickMs) % current.wheelSize;current.buckets[bucketIndex].addTask(task);} else {// 检查是否存在上层时间轮if (overflowTimer == null) {// 动态创建上层时间轮long nextTickMs = current.tickMs * current.wheelSize; // 上层 tickMs = 当前层总跨度overflowTimer = new HashedWheelTimer(nextTickMs, current.wheelSize);}// 递归调用:将剩余延迟传递给上层overflowTimer.addTask(task, delayMs - current.interval);}
}

每次创建上层时间轮时,该层的currentTick初始为0。

时间的推进

时间轮如果像机械手表那样,按照最底层时间跨度一格一格推进,那么将非常耗性能。Kafka使用DelayQueue来推进时间。桶中任务链表按照待执行时间进行排序,其中最快执行的任务放在头部。桶的TimerTaskList将作为DelayQueue一个元素插入,该元素的待执行时间为TimerTaskList的头部元素的时间。

当TimerTaskList被取出执行时,此时会维护各层的currentTick。同时会对列表中还有剩余时间的任务进行“时间轮降级”,将它们插入到对于的桶中。

http://www.dtcms.com/a/411311.html

相关文章:

  • 【精品资料鉴赏】解读145页 PPT汽车集团数字化转型互联网+顶层战略设计方案
  • 环签名:AOS Borromean
  • 自适应平台(Adaptive Platform)标准——Specification of Time Synchronization
  • 制作网站的知识网站访客qq获取系统 报价
  • tcpdump 使用详解
  • 新余 网站建设公司上海黄浦网站建设
  • 数据采集技术:02 有关离线采集
  • 【SCI一区】模糊斜率熵 Fuzzy Slope Entropy+状态分类、故障诊断!
  • 品牌网站解决方案vr全景网站怎么做
  • 科技有限公司 网站制作poedit2 汉化wordpress
  • 视频融合平台EasyCVR 构筑智慧交通可视化管理与智能决策中枢
  • 一个商城网站开发要多少时间内蒙中国建设银行招聘网站
  • 从图像到精准文字:基于PyTorch与CTC的端到端手写文本识别实战
  • 使用 PyTorch 实现 CIFAR-10 图像分类:从数据加载到模型训练全流程
  • 网站开发公司能否挣钱怎么在网站空间上传文件
  • 亭湖区建设局网站楼盘网站开发报价
  • java后端工程师进修ing(研一版‖day49)
  • opendds初入门之对inforepo模式运行探索
  • 简单公司网站最全的域名后缀
  • 比邻智联发布生活物联网家电应用白皮书和Cat.1模组新品
  • 第七章 Spring-Boot框架
  • 网站html静态化解决方案网站制作公司 北京
  • 金仓数据库实现电子证照系统从MongoDB平滑迁移,国产化替代迎来新典范
  • CAN总线学习(四)错误处理 STM32CAN外设一
  • 【OpenGL】LearnOpenGL学习笔记28 - 延迟渲染 Deferred Rendering
  • 莱芜梆子网站昆山网站建设需要多少钱
  • 站长交流装潢设计什么意思
  • web核心—HTTP
  • 线程池导入大数据量excel
  • Spring Boot 3.x + Security + OpenFeign:如何避免内部服务调用被重复拦截?