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

成都门户网站建设上海网站推广

成都门户网站建设,上海网站推广,kratos主题wordpress,网站策划用培训吗Timer使用一个线程,一个小根堆。线程执行根上的任务,小根堆会根据执行时间戳重新调整,根上的任务是下一个执行的任务。 DelayedQueue维护一个优先级队列,本质也是一个数组方式的堆。任务生成时也有时间戳,只提供存储。…

Timer使用一个线程,一个小根堆。线程执行根上的任务,小根堆会根据执行时间戳重新调整,根上的任务是下一个执行的任务。

DelayedQueue维护一个优先级队列,本质也是一个数组方式的堆。任务生成时也有时间戳,只提供存储。

ScheduledThreadPoolExecutor的存储是DelayedWorkQueue,维护一个优先级队列,本质也是一个数组方式的堆。也是任务有对应的时间戳,执行后重新设置任务执行时间,但是是多线程方式执行。

Spring的@Scheduled底层使用的是ScheduledThreadPoolExecutor。默认单线程,所以同一个时间的任务会排序执行,随机的排序,如果维持单线程,多个节点执行,即使加了分布式锁也可能会重复执行,可以增加线程数量,可以使用多个scheduler。https://blog.csdn.net/liuxiao723846/article/details/90546619
@Scheduled(fixedRate = 51_000)是一个任务开始5秒后下一个任务执行。
@Scheduled(fixedDelay = 5
1_000)是一个任务结束5秒后下一个任务执行。

上面使用堆的方式,插入任务的效率是nlogn,logn是因为堆调整为新的小根堆时是logn。

Quartz使用一个调度器线程遍历所有任务当前是否到了执行时间,太慢。

Netty包里有HashedWheelTimer。时间轮在Dubbo定时重试,RocketMQ延时消息、XXL-Job任务调度中都有使用。
时间轮使用一个调度器线程看刻度,每个刻度对应一个列表存储此时应执行的任务,比起JDK,任务插入效率是1,比起Quartz,一个调度器线程不遍历所有任务,而是找到刻度,就找到了要执行的任务。
但是在时间刻度多,但任务数量少的情况下,遍历刻度反倒不如遍历任务,效率低,而且很多刻度上没有任务,还占用空间。
所以可以使用多维度的时间轮来减少刻度,比如秒级刻度,一天有86400个秒,使用这种,任务少时不合适。可以使用一个小时级刻度,加一个分钟级刻度,加一个秒级刻度。
还可以以应用方向为层级,构造垂直多层的时间轮,一层是一个应用方向,但调度时仍然是一个线程,类似于IO多路复用。

参考:http://it.taocms.org/01/100134.htm

http://www.sczhlp.com/news/98373/

相关文章:

  • 营销型网站的三元素网站ftp查询
  • 江苏网络公司网站建设线上维护需要做什么
  • 沈阳火车站wish跨境电商平台
  • wordpress 文章评论数重庆seo整站优化外包服务
  • 河北地矿建设集团官方网站长沙专业网站制作
  • 个人网站可以做自媒体吗上海wordpress网站建设
  • Python进阶必看:深入解析yield的强大功能
  • 做任务什么网站怎么查看网站ftp地址
  • 做一个网站的建设过程淘宝手机网站模板下载安装
  • 江苏平台网站建设价位微信社群运营工具
  • wordpress热门文章查询嘉兴seo优化
  • 网络企业做网站seo建站的步骤
  • polyglot,一个有趣的 Python 库!
  • 个人介绍与博客初建
  • 宁波搭建网站公司wordpress主题样式表
  • 网站做app要权限怎么看网站用的什么后台
  • wordpress建的大型网站吗进货渠道网
  • 如何做好一个企业网站基于html的网站设计
  • 手机网站特效代码西安知名的集团门户网站建设费用
  • 电子商务网站开发与实现网站引导页面制作的四个任务名称
  • 洛阳电商网站建设中国建设银行贵州省分行网站
  • 迅雷黄冈网站推广软件wordpress 使用插件下载
  • 无锡网站建设 君通科技wordpress 收录 改版
  • 宁波在线制作网站网站收录平台
  • 百度网站首页网址网站架构设计师求职信
  • 专做山珍的网站北京网站设计网站设计公司价格
  • 国内可访问的海外网站和应用制作一个网站步骤排版
  • 手机制作ppt北京网站seowyhseo
  • 大连哪个企业想做网站宜都网站设计
  • 网站开发是否交印花税运营方案