1

假设我有 100 台服务器,每台服务器都运行一个守护进程 - 让我们称之为server- 该服务器负责为该特定服务的每个用户生成一个线程(假设每台服务器 1000 个线程)。每个N线程每秒钟都会做一些事情并获取该特定用户的信息(此请求/响应模型无法更改)。我遇到的问题是有时线程挂起并停止做某事。我需要一些方法来知道用户数据是陈旧的,需要刷新。

我唯一的想法是每秒5N让线程更新与该用户关联的 MySQL 记录(last_scanned用户表中的一列),另一个进程每秒检查该表15N,如果该last_scanned列不是当前的,则重新启动线程。

4

1 回答 1

1

处理此问题的一般方法是让线程将其状态报告回服务器守护程序。如果您在最后 5N 秒内没有看到状态更新,那么您将终止该线程并启动另一个线程。

您可以跟踪您在列表中启动的当前活动线程,然后偶尔循环它们以确定状态。

当然,您还应该修复程序中导致线程过早退出的错误。

过早退出和终止线程也可能使您的程序处于意外的非原子状态。您可能还应该让服务器守护程序运行一个清理过程,以确保队列中的任何项目,或者您用来确定工作负载的任何项目,在一段时间不活动后被重置。

于 2012-05-03T23:46:20.917 回答