tinyio_core/runtime/
executor.rs

1use 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}