add a short sleep in the supervisor's event loop to reduce CPU usage (#1080)

This commit is contained in:
bmc-msft
2021-07-16 13:32:26 -04:00
committed by GitHub
parent 517aa54a59
commit 58e57621d1

View File

@ -14,6 +14,7 @@ use crate::work::IWorkQueue;
use crate::worker::IWorkerRunner;
const PENDING_COMMANDS_DELAY: time::Duration = time::Duration::from_secs(10);
const BUSY_DELAY: time::Duration = time::Duration::from_secs(1);
pub struct Agent {
coordinator: Box<dyn ICoordinator>,
@ -231,6 +232,15 @@ impl Agent {
async fn busy(&mut self, state: State<Busy>) -> Result<Scheduler> {
self.emit_state_update_if_changed(StateUpdateEvent::Busy)
.await?;
// Without this sleep, the `Agent.run` loop turns into an extremely tight loop calling
// `wait4` of the running agents. This sleep adds a small window to allow the rest of the
// system to work. Emperical testing shows this has a significant reduction in CPU use.
//
// TODO: The worker_runner monitoring needs to be turned into something event driven. Once
// that is done, this sleep should be removed.
time::sleep(BUSY_DELAY).await;
let mut events = vec![];
let updated = state
.update(&mut events, self.worker_runner.as_mut())