Realtime

Vormen van realtime gedrag

Realtime gedrag heeft diverse gedaanten. Het is belangrijk om na te gaan over welke vorm van realtime je het in een bepaalde situatie hebt.

  • Synchroniseren met echte (plaatselijke) tijd, de kloktijd
  • Synchroniseren met andere signalen, bv. audio en video
  • "Op tijd" voor bv. het gaande houden van een stroom gegevens
  • "Op tijd" aangegeven als maximale vertraging tussen bv. het indrukken van een knop en de daarbij behorende actie

Zie ook enkele voorbeelden van een scheduler. Er zijn diverse andere oplossingen te bedenken. Deze werkt met een tijd ten opzichte van de systeemtijd. Aan het begin van het programma wordt de systeemtijd opgevraagd en onthouden. Dat moment definieren we als tijdstip 0: zou je op exact hetzelfde moment de tijd nogmaals kunnen opvragen dan is het verschil tussen de huidige tijd en het begin van de tijdrekening 0 microseconden.

De event queue wordt gevuld met een aantal events, alle voorzien van een timestamp die aangeeft "hoe laat" de event iets moet doen. De timestamps zijn relatief ten opzichte van tijdstip 0.

Aan de andere kant van de queue lezen we een event. Als die volgens zijn timestamp al in actie moet komen (timestamp groter dan of gelijk aan de huidige relatieve tijd) dan wordt de actie uitgevoerd, de event uit de queue verwijderd en wordt de volgende event gelezen.

Als de gelezen event nog niet in actie moet komen dan moeten we wachten tot het wel tijd is om in actie te komen. Dat kun je op een aantal manieren doen:

  • Vraag onmiddelijk weer de systeemtijd op en kijk of het inmiddels tijd is om iets te doen. De processor en enkele andere onderdelen van de computer zijn hier dan volledig toegewijd mee bezig en hebben geen aandacht meer voor anderen taken. Als je geluk hebt regelt het OS dat andere processen nog wat tijd krijgen, als het een beetje tegenzit klinkt je mooie Karplus-Strong niet helemaal zoals je bedoeld had en als je dit soort geintjes vlak voor een belangrijke performance uithaalt kun je ervan uitgaan dat je computer vastloopt. Murphy never sleeps. He just rests.
  • Laat je proces korte tijd slapen en ga daarna nog eens kijken of het inmiddels tijd is om in actie te komen. Wat een goede periode is moet je van geval tot geval bekijken. Deze oplossing werkt goed want de processor kan even iets anders gaan doen.

In enkele gevallen wil je events die al lang geleden afhandeld hadden moeten zijn niet meer gebruiken maar gewoon weggooien.