Why does PortOS run more slowly when preemption is turned on?
Getting user-level threads preemption to work correctly in Windows NT requires some extra kernel threads to trigger clock interrupts and make the interrupt handler run and exit cleanly, which compete for CPU time with the NT kernel thread running the minithreads. Basically, the design of timers in NT makes an efficient implementation difficult.