我试图了解"心跳线程"的工作原理(首先是在概念级别(。
"线程-A"怎么可能检查"线程-B"的状态(在Java中(,并相应地将状态更新到某个服务器(它期望线程B处于活动状态(。线程 A 会执行什么机制来获取线程 B 的状态?
通常,一个线程只能通过调用isAlive()
来测试另一个线程是否处于活动状态。
但是,许多线程可以"活动",但处于不做任何有用操作的状态。要检测这一点,您需要让线程发布有关其活动的定期更新。然后,监视线程可以检测是否不再发生预期的活动。
例如,批处理可能会在每次处理记录时更新共享计数器。另一个线程可以读取此计数器,如果它在一段时间内没有增加,则假定进程已挂起。
在生产系统中,传统的解决方案是通过调用指标库来检测流程。该库会将此信息提供给时序数据库收集器。通知和可视化系统将使用时间序列数据库中的数据来发送警报或显示图形。
软件建议是题外话,但这个堆栈的一个实例是千分尺来收集指标,普罗米修斯来收集和存储它们,格拉法纳来显示它们。