The AppCore uses a mostly cooperative scheduler, however, it is allowed to preempt threads under some specific circumstances, see the Rescheduling
section for the cases where the scheduler may preempt a lower-priority thread to let a higher-priority run.
Each core has its own KScheduler instance.
Each KObject manages a list of threads that are waiting on it. This list is iterated over each time the KObject is signalled.