timer: sleep(duration) via min-heap of (deadline, pid)

Adds a BinaryHeap of timer entries on SchedulerState. sleep() inserts
an entry and parks; schedule_loop pops due entries each iteration and
unparks them. When the run queue is empty but timers are pending, the
OS thread sleeps until the soonest deadline.

Single-threaded only; thread::sleep is fine because no other thread
can wake us. The IO thread coming next will need a Condvar or pipe
wakeup to break this OS-sleep early.
This commit is contained in:
Claude
2026-05-22 05:22:55 +00:00
parent 6c48caecab
commit 2cf75febdc
4 changed files with 253 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ pub mod actor;
pub mod channel;
pub mod scheduler;
pub mod supervisor;
pub mod timer;
// ---------------------------------------------------------------------------
// Global allocator
@@ -36,5 +37,5 @@ static ALLOCATOR: preempt::PreemptingAllocator = preempt::PreemptingAllocator;
pub use channel::{channel, Receiver, RecvError, Sender};
pub use pid::Pid;
pub use scheduler::{run, self_pid, spawn, spawn_under, yield_now, JoinError, JoinHandle};
pub use scheduler::{run, self_pid, sleep, spawn, spawn_under, yield_now, JoinError, JoinHandle};
pub use supervisor::Signal;