[−][src]Module rustasim::worker
This module takes care of scheduling the actors appropriately
My current guess is that we want the actors scheduled in round-robin fashing: keep running until you can't go any further (stall), and then wait until someone stalls on you. That's ideal in that it minimizes switching. This is also good because it ideally mimizes null-message passing.
To implement this without actually monitoring everything, I propose running a certain number of workers, each advancing a particular actor until it stalls, then putting that actor to the back of the queue. Ideally this actor will next be scheduled when all of its neighbours will have made progress.
To actually do this, each actor needs an "advance" method that will return when it can't make any more progress, and can be called repeatedly. This module can take these "advanceables" (trait?) and schedule them via crossbeam's work-stealing queue (insert link).
Enums
ActorState | Return value for actors to use to signal their state to the workers |
Traits
Advancer | Advancer trait to be implemented by the simulation actors |
Functions
run | Runs until no more progress can be made at all... |
Type Definitions
LockedTaskHeap | Convenience wrapper for a reference counted, distributed heap of frozen actors... |