NPS provides non-preemptive scheduling for multiple threads of execution inside server applications.
All threads run in the same address space, but each thread has its own individual runtime stack and program-counter.
The scheduling is done in a cooperative way. In other words, the threads are dispatched based on priority and pending events. The event facility allows threads to wait until various types of events occur, including pending I/O on filedescriptors, elapsed timers, pending I/O on message ports, thread and process termination and even customized callback functions.