I'm using a temporal vat model, which has a lot of nice properties. In my model:
Each vat has a logical time (getTime).
Vats may schedule events for future times (atTime, atTPlus).
Multiple events can be scheduled within an instant (eventually).
Vats are loosely synchronized. Each vat sets a 'maximum drift' from the lead vat.
No vat advances past a shared clock time (typically, wall-clock). This allows for soft real-time programming.
This model is designed for scalable, soft real-time programming. The constraints on vat progress give me an implicit real-time scheduler (albeit, without hard guarantees), while allowing a little drift between threads (e.g. 10 milliseconds) can achieve me an acceptable level of parallelism on a multi-core machine.
Further, timing between vats can be deterministic if we introduce explicit delays based on the maximum drift (i.e. send a message of the form 'doSomething `atTime` T' where T is the sum of getTime and getMaxDrift.