Skip to content

Instantly share code, notes, and snippets.

@larytet
Created July 19, 2020 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save larytet/e12ee36faf11394476910a6bde1ea717 to your computer and use it in GitHub Desktop.
Save larytet/e12ee36faf11394476910a6bde1ea717 to your computer and use it in GitHub Desktop.
# Based on https://www.xaprb.com/blog/2006/05/04/how-to-make-a-program-choose-an-optimal-polling-interval/
wait = 128;
minWait = 1;
maxWait = 32768;
didSomething = false;
while (true) {
didSomething = false;
// Do stuff till done
do {
stuffToDo = pollResource();
if (stuffToDo) {
doStuff(stuffToDo);
didSomething = true;
}
} while (stuffToDo);
// Decide how long to wait
if (didSomething) {
wait = max(minWait, wait / 2);
}
else {
wait = min(maxWait, wait * 2);
}
// Wait
sleep(wait);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment