4.3.3 运行心跳任务

心跳任务(HeartbeatTask)作为一个延迟的任务,定义在抽象的客户端协调者类’(AbstractCoordi.nator)中。在4.2.3节第3小节“延迟的任务队列”中客户端在轮询时,只会取出延迟队列中调度时间小于当前时间(反过来更容易理解:当前时间大于调度时间)的延迟任务,将其弹出来并调用它的run()方法。如果任务的调度时间大于当前时间,它不会从队列中弹出,也不会执行run()方法。相关代码如下:

当调用延迟任务的run()方法时,说明当前时间已经超过这个延迟任务的调度时间,正常来说,这时应该发起心跳任务。但上一节最后提到的“客户端第一次启动时,没有上一次的心跳时间”这种场景需要额外处理。当客户端第一次启动时,会调用心跳任务的重置方法reset(),创建一个调度时间为当前时间的延迟任务(假设为0秒)。当轮询时,轮询的时间点会稍微落后于刚创建的延迟任务(假设为2秒),即轮询时的当前时间大于延迟任务的调度时间,这个延迟任务照理应该立即执行。但实际上还是要按照“当前时间距离下一次心跳时间”同样的逻辑,来处理这个第一个创建的心跳任务。

心跳任务发送心跳请求的主要逻辑是:在发送心跳请求前,记录心跳状态的最近心跳发送时间(lastHeartbeatSend);在收到心跳响应结果后,记录心跳状态的最近心跳接收时间(lastHeartbeatRecei.ve);然后计算下一次心跳任务的发生时间,新创建一个延迟的心跳任务。下面举例了客户端发送一次延迟心跳任务的过程。延迟任务超时后会从队列中弹出,如果延迟的任务没有真正执行,要重新加入队列。如果执行过延迟任务,即发送了心跳请求,在心跳处理完成后也要创建新的延迟任务并重新加入队列。

4.3.3 运行心跳任务相关推荐

  1. Yarn中map、reduce任务运行容器YarnChild分析

    在对Yarn上MRAppMaster组件详解以及任务资源申请.启动的源码分析的分析中可以知道,真正用于执行MapTask任务.ReduceTask任务的进程容器为YarnChild进程,接下来对该Ya ...

  2. Go实现Raft第二篇:选举

    女主宣言 今天小编为大家分享一篇关于Golang实现Raft的文章,本篇文章为系列中的第二篇,对Raft中的选举机制进行介绍并使用go进行实现.希望能对大家有所帮助. PS:丰富的一线技术.多元化的表 ...

  3. 程序员版《On Call 24 小时》

    身为开发者的你,一定有过不止一次的 On Call 24 小时爆肝经历,随时待命,随叫随到-- 作者 | Henrik Warne 译者 | 弯月 责编 | 仲培艺 出品 | CSDN(ID:CSDN ...

  4. 浅谈实时对战网络游戏的同步机制

    浅谈实时对战网络游戏的同步机制 重要的性能指标 三种不同方向的技术实现介绍 非帧状态同步 帧指令同步 帧状态同步 三种同步方式的对比 帧状态同步和ECS架构 实时对战游戏,相信大家都不陌生,一些经典的 ...

  5. MapReduce通俗理解

    Mapreduce mapreduce通俗理解 举个例子,我们要数图书馆中的所有书.你数1号书架,我数2号书架.这就是"Map".我们人越多,数书就更快.现在我们到一起,把所有人的 ...

  6. openstack的分布式应用工具包Tooz

    2019独角兽企业重金招聘Python工程师标准>>> 简介 Tooz项目旨在通过提供协调API帮助开发人员构建分布式应用程序,集中最常见的分布式 基元 ,如组成员协议.锁服务和领导 ...

  7. Git 教程 - Git 基本用法

    Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project  # 创建项目目录  cd project  # 进入 ...

  8. HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

    在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系 ...

  9. anaconda怎么运行python程序_Heartrate:如追综心跳般实时动态可视化监测Python程序运行...

    机器之心报道 参与:一鸣.杜伟 Python 是一门非常受欢迎的编程语言,其灵活易用的特性使其在 web 应用.数据分析等方面有广泛的应用.但是 Python 有一个受到诟病的特点--运行速度低下.因 ...

最新文章

  1. 杀毒软件引起的WinCE编译出错问题
  2. J.U.C系列(三)Semaphore的使用
  3. Oracle10g中OEM相关问题
  4. 使用TFS+GIT实现分布式项目管理
  5. python 美化输出_python基础_格式化输出(%用法和format用法)
  6. NOIP2017年11月9日赛前模拟
  7. 《机器学习实战》笔记(02):k-近邻算法
  8. 未来计算机是否有意识或者人为的赋予意识,人工智能会有自我意识吗?
  9. memcache 知识点
  10. hmaster和datanaode启动后很快停止_室内消火栓系统消防泵启动方法
  11. mysql 5.1升级windows_怎么在Windows下升级MySQL
  12. Android自定义之流式布局
  13. win7 64位系统PS、AI、PSD缩略图预览补丁
  14. 当series用math包里的log计算出现错误
  15. php验证码显示不了,PHP验证码无法显示的原因及解决办法
  16. centos yum 安装php8 php8.0 使用remi源
  17. 股市投资时,寻找低市盈率标的
  18. 男人到中年,活得不如一条狗
  19. 游戏打的菜?当然是延迟的锅啦~
  20. 在ANSYS workbench中如何对物体局部区域进行网格细密化

热门文章

  1. openstack创建云主机流程
  2. 2020长三角区块链应用创新大赛复赛第三场于能链科技成功举办!
  3. 【升级pip;查看pip版本】
  4. EasyClick更新图库
  5. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)
  6. 单片机C语言学习(菜鸟入门)
  7. Win 10 系统下搭建 Python 编程环境,有手就行
  8. hrnet转onnx
  9. 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
  10. 使用Python将文件名中的汉字序号改为阿拉伯数字序号