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: