私のアプリケーションには、現在、次のように長時間実行されているスレッドに実装されている「ハートビート」機能があります(擬似コード)。
while (shouldBeRunning)
{
Thread.Sleep(smallInterval);
if (DateTime.UtcNow - lastHeartbeat > heartbeatInterval)
{
sendHeartbeat();
lastHeartbeat = DateTime.UtcNow;
}
}
さて、私のアプリケーションが集中的なCPU時間(CPUが90%以上占有されている数分間の重い計算)を経験しているとき、たとえsmallInterval << heartbeatIntervalであっても、ハートビートが遅れることがあります。
いくつかの数値を処理するには:heartbeatIntervalは60秒、lastHeartbeatは0.1秒、報告される遅延は最大15秒です。つまり、私の理解では、CPUが非常にビジーの場合、Sleep(10)はSleep(15000)のように持続する可能性があります。
スレッドの優先度をAboveNormalとして設定しようとしましたが、このような問題を回避するためにデザインを改善するにはどうすればよいですか?