Improvement:
- better queue algorithm that pulls tasks in the first in first out fashion instead of last in first out (adapted from Rust's Tokio library)
- for counting the amount of blocking / stealing workers, oasync now uses an atomic variable instead of looping over every single worker, improving performance
- instead of dumping future tasks back into queues, they are placed in a separate min heap based on the time they should be executed, a dedicated background thread sleeps until the nearest execute time, waking only to move ready tasks into the global queue, this prevents continuously pushing task back into queue, causing high CPU usage while being basically idle
- use a thread local free list for tasks, when task finishes, instead of freeing it, it is pushed to said free list instead, when a task is made, oasync checks the free list to see if we have available items before falling back to new_clone, minimizing the bottleneck on the global allocator's lock
- backpressure now supports backoff for delayed tasks
- misc code update that changes
if var == trueand related to justif varorif !var(basically a style change)