tinyio_core/runtime/
executor.rs1use super::{scheduler::Scheduler, RUNTIME};
2
3#[derive(Debug, Default)]
4pub struct Executor {
5 scheduler: Scheduler,
6}
7
8impl Executor {
9 pub fn new() -> Self {
10 Self {
11 scheduler: Scheduler::default(),
12 }
13 }
14
15 pub fn run(&mut self) {
16 let backoff = crossbeam::utils::Backoff::new();
17 loop {
18 match RUNTIME.get().unwrap().pop() {
19 Some(task) => {
20 backoff.reset();
21 self.scheduler.try_schedule(task);
22 }
23 None => {
24 if self.scheduler.done() {
25 break;
26 } else {
27 backoff.snooze();
28 }
29 }
30 }
31 }
32 }
33}