Quick Recap
In the previous article, we introduced priority-based and layered schedulers, solving the problem of “which tasks should run first.”
However, real-world applications introduce another challenge:
long-running tasks can still block the main thread.
To keep applications responsive, a scheduler must also support:








