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

整容网站模板想自己做网站需要会什么

整容网站模板,想自己做网站需要会什么,北京seo分析,asp网站数据库扫描大家好#xff0c;我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架#xff0c;我们会怎么做呢#xff1f; 1. 基础实现#xff1a;简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池#xff0c;用户每提交一…大家好我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架我们会怎么做呢 1. 基础实现简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池用户每提交一个定时任务就分配一个线程去执行。每个线程使用 Thread.sleep() 或者 while (true) 不断轮询检查当前时间是否达到了任务的触发时间。 这种方式的问题 一个线程只能执行一个任务如果定时任务很多线程池的线程很快就会被占满导致新的任务无法执行。比如机器是 4 核 CPU最多可能支持 10 个线程同时执行任务。超过这个数量的任务只能阻塞等待影响可用性。 一般定时任务都是要永久执行不可能就执行一次或几次就丢弃了。在这种方案下一台机器只能执行那几个任务因为那几个任务一直在占用线程池其他任务无法执行。 2. 优化方案任务列表线程池 为了解决上面的问题我们可以改进方案使用 检查任务-派发任务 模式 创建一个任务列表用来存放所有待执行的任务。 使用一个独立的线程不断扫描任务列表找到即将到达触发时间的任务。 将快到触发时间的任务提交给线程池线程池里的线程只负责执行任务而不需要一直轮询等待。 任务执行完后线程自动释放回到线程池提高并发能力。 这种方式的优点 线程池里的线程专注执行任务不需要每个线程都去检测触发时间提高了 CPU 的利用率。 可以同时执行多个任务避免任务阻塞导致的执行延迟。 任务调度逻辑集中管理便于扩展和优化。 存在的问题任务过期 但这种方式也有一个问题当任务列表里有几百、几千个任务时扫描任务的线程可能处理不过来导致一些任务在被扫描到时已经过期了。 那你可能会说可以增加时间啊比如提前两秒就提交入线程池。但这样会导致触发时间精度下降比如某个任务严格要求每3秒执行一次提前两秒去执行显然是不行的。 3. 进一步优化任务预读时间轮 为了解决任务过期问题我们接下来引入 任务预读 和 时间轮 的概念。 这里就援引一张网络上的时间轮图片。 时间轮的核心思想 可以把时间轮想象成 时钟表 时间轮 一个圆形数组环形结构每个刻度 一秒钟时间槽位slot当前指针 记录当前时间进度任务 被分配到不同的槽位等指针走到对应的槽位时执行 当时间轮的指针随着时间推进时就会触发当前槽位内的任务执行。 同样的我们开启一个独立的线程不断扫描任务列表通过任务的触发时间计算每个任务在时间轮上的槽位。如下图为 XXL-JOB 源码。 JobScheduleHelper.java Thread scheduleThread 部分源码 通过任务触发时间计算在 时间轮 上的槽位把任务添加入 时间轮 相应的槽位一个槽位上可以同时存在多个任务用一个列表维护更新任务的下一次触发时间。 上述线程的把任务添加到时间轮的操作称之为预读 同时还有一个独立线程 ringThread可以理解为时间轮上的 指针 。它通过 while 循环不断获取当前的秒数java.util.Calendar。 int nowSecond Calendar.getInstance().get(Calendar.SECOND); 通过对当前秒数nowSecond对60秒取模去时间轮里相应的槽位得到相应的任务列表提交给线程池执行任务JobTriggerPoolHelper。 如上操作检查任务的线程scheduleThread 无需等到任务即将到达触发时间时再向线程池提交任务只需要预读任务加入到时间轮即可。派发任务的工作由 指针ringThread完成即可。从而实现了防止了任务的过期保证了精准触发。 4. XXL-JOB任务调度源码 JobScheduleHelper.java XXL-JOB 的时间轮没有使用环形结构而是一个ConcurrentHashMap。后续是对60取模来实现类似的循环功能。 scheduleThread 由于调度中心将来可能会集群部署所以这里使用 select...for update 的悲观锁保证在同一时刻只能有一个调度中心在调度任务防止任务重复调度。 XXL-JOB的MySQL表有个任务表这里默认一次最多读前6000个任务到内存任务列表中preReadCount 6000PRE_READ_MS 5000即5秒。 所以这里读取的任务列表是未来5秒内将要触发的任务最多前6000个防止OOM或线程池来不及处理 遍历任务列表对60取模计算出槽位将任务放入时间轮的对位槽位。 问如果一个任务每300秒执行一次呢是不是应该还有个记录圈数字段呢 答由于预读操作是未来5秒内将要触发的任务所以不需要额外记录圈数这个地方也是XXL-JOB和一般时间轮稍微不一样的点。 ringThread 这里的任务触发会把任务添加到线程池里线程池并行地通过自研RPC的方式通知执行器执行。 分布式环境下调度中心和执行器分别部署 JobTriggerPoolHelper.java 这里有两个线程池fastTriggerPool 和 slowTriggerPool。 线程池选择逻辑 默认情况下任务会分配给 fastTriggerPool即高频率触发的线程池。如果某个任务在过去一分钟内超时超过 10 次即 jobTimeoutCount 超过 10那么该任务会被分配到 slowTriggerPool即低频率触发的线程池。这是为了 限制高频超时任务对资源的占用避免它们占用过多线程池资源影响正常任务的调度。 源码见下图。
http://www.hkea.cn/news/14278446/

相关文章:

  • 小说类型网站怎么做打开一张图片后点击跳转到网站怎么做的
  • 国外网站建设企业单页面网站 wordpress
  • 长春仿站定制模板建站苏州市城市建设局网站
  • 成都网站制作哪家专业中企动力手机邮政登录
  • uiapp博客 个人网站商丘市网站建设公司
  • 建站公司现状有个网站经常换域名
  • 有什么好的做家常菜的网站外包的利与弊
  • 做网站下导航字号为多大盐城网站app建设
  • 外国s网站建设wordpress员工管理系统
  • 网站一键制作linux apache发布php网站
  • 滕王阁环境建设网站萌导航
  • 做旅游网站的目的凡科网建设网站如何修改源代码
  • 卖货网站平台建网站用自己的主机做服务器
  • 科技+杭州+网站建设wordpress插件放在主题的哪里
  • 合肥建站软件dede一键更新网站
  • 河南企业网站定制c#网站购物车怎么做
  • php网站开发好学吗老网站不要了做新站需要怎么处理
  • 南昌建网站那家好外贸网络推广哪个好
  • 黑龙江华龙建设集团网站erp企业管理系统有哪些软件
  • 免费网站软件推荐沈阳seo专业培训
  • 广西壮族自治区在线seo关键词排名优化上海网站排名优化价格
  • 色块网站设计html5网站开发环境的搭建
  • 搜索引擎在网站建设中的重要性wordpress搭建的网站
  • 初学者做网站厦门优秀的网站设计
  • 网站编程工资多少wordpress主题 演员
  • 做网站用的动漫资料安徽省干部建设教育网站
  • 优惠券的网站制作wordpress 超级管理员
  • 网站维护页面专业做家居的网站
  • 乘客电梯做推广的网站百度收录量查询
  • 站内推广的方法和工具实事热点新闻事件