It's really somewhere in-between a Preemptive scheduler and Cooperative scheduler, as it doesn't truly interrupt thread (commands), but rather boils them down to single lines of code to facilitate the scheduler; But this also means that it isn't at the mercy of a process like Cooperative (unless WAIT is used), nor do processes need to be explicitly programmed to hand control over to the scheduler.