4.3.3 运行心跳任务
4.3.3 运行心跳任务
心跳任务(HeartbeatTask)作为一个延迟的任务,定义在抽象的客户端协调者类’(AbstractCoordi.nator)中。在4.2.3节第3小节“延迟的任务队列”中客户端在轮询时,只会取出延迟队列中调度时间小于当前时间(反过来更容易理解:当前时间大于调度时间)的延迟任务,将其弹出来并调用它的run()方法。如果任务的调度时间大于当前时间,它不会从队列中弹出,也不会执行run()方法。相关代码如下:
当调用延迟任务的run()方法时,说明当前时间已经超过这个延迟任务的调度时间,正常来说,这时应该发起心跳任务。但上一节最后提到的“客户端第一次启动时,没有上一次的心跳时间”这种场景需要额外处理。当客户端第一次启动时,会调用心跳任务的重置方法reset(),创建一个调度时间为当前时间的延迟任务(假设为0秒)。当轮询时,轮询的时间点会稍微落后于刚创建的延迟任务(假设为2秒),即轮询时的当前时间大于延迟任务的调度时间,这个延迟任务照理应该立即执行。但实际上还是要按照“当前时间距离下一次心跳时间”同样的逻辑,来处理这个第一个创建的心跳任务。
心跳任务发送心跳请求的主要逻辑是:在发送心跳请求前,记录心跳状态的最近心跳发送时间(lastHeartbeatSend);在收到心跳响应结果后,记录心跳状态的最近心跳接收时间(lastHeartbeatRecei.ve);然后计算下一次心跳任务的发生时间,新创建一个延迟的心跳任务。下面举例了客户端发送一次延迟心跳任务的过程。延迟任务超时后会从队列中弹出,如果延迟的任务没有真正执行,要重新加入队列。如果执行过延迟任务,即发送了心跳请求,在心跳处理完成后也要创建新的延迟任务并重新加入队列。
4.3.3 运行心跳任务相关推荐
- Yarn中map、reduce任务运行容器YarnChild分析
在对Yarn上MRAppMaster组件详解以及任务资源申请.启动的源码分析的分析中可以知道,真正用于执行MapTask任务.ReduceTask任务的进程容器为YarnChild进程,接下来对该Ya ...
- Go实现Raft第二篇:选举
女主宣言 今天小编为大家分享一篇关于Golang实现Raft的文章,本篇文章为系列中的第二篇,对Raft中的选举机制进行介绍并使用go进行实现.希望能对大家有所帮助. PS:丰富的一线技术.多元化的表 ...
- 程序员版《On Call 24 小时》
身为开发者的你,一定有过不止一次的 On Call 24 小时爆肝经历,随时待命,随叫随到-- 作者 | Henrik Warne 译者 | 弯月 责编 | 仲培艺 出品 | CSDN(ID:CSDN ...
- 浅谈实时对战网络游戏的同步机制
浅谈实时对战网络游戏的同步机制 重要的性能指标 三种不同方向的技术实现介绍 非帧状态同步 帧指令同步 帧状态同步 三种同步方式的对比 帧状态同步和ECS架构 实时对战游戏,相信大家都不陌生,一些经典的 ...
- MapReduce通俗理解
Mapreduce mapreduce通俗理解 举个例子,我们要数图书馆中的所有书.你数1号书架,我数2号书架.这就是"Map".我们人越多,数书就更快.现在我们到一起,把所有人的 ...
- openstack的分布式应用工具包Tooz
2019独角兽企业重金招聘Python工程师标准>>> 简介 Tooz项目旨在通过提供协调API帮助开发人员构建分布式应用程序,集中最常见的分布式 基元 ,如组成员协议.锁服务和领导 ...
- Git 教程 - Git 基本用法
Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project # 创建项目目录 cd project # 进入 ...
- HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系 ...
- anaconda怎么运行python程序_Heartrate:如追综心跳般实时动态可视化监测Python程序运行...
机器之心报道 参与:一鸣.杜伟 Python 是一门非常受欢迎的编程语言,其灵活易用的特性使其在 web 应用.数据分析等方面有广泛的应用.但是 Python 有一个受到诟病的特点--运行速度低下.因 ...
最新文章
- 杀毒软件引起的WinCE编译出错问题
- J.U.C系列(三)Semaphore的使用
- Oracle10g中OEM相关问题
- 使用TFS+GIT实现分布式项目管理
- python 美化输出_python基础_格式化输出(%用法和format用法)
- NOIP2017年11月9日赛前模拟
- 《机器学习实战》笔记(02):k-近邻算法
- 未来计算机是否有意识或者人为的赋予意识,人工智能会有自我意识吗?
- memcache 知识点
- hmaster和datanaode启动后很快停止_室内消火栓系统消防泵启动方法
- mysql 5.1升级windows_怎么在Windows下升级MySQL
- Android自定义之流式布局
- win7 64位系统PS、AI、PSD缩略图预览补丁
- 当series用math包里的log计算出现错误
- php验证码显示不了,PHP验证码无法显示的原因及解决办法
- centos yum 安装php8 php8.0 使用remi源
- 股市投资时,寻找低市盈率标的
- 男人到中年,活得不如一条狗
- 游戏打的菜?当然是延迟的锅啦~
- 在ANSYS workbench中如何对物体局部区域进行网格细密化