Information:
GNU Portable Threads 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 program counter, runtime stack, signal mask and errno variable.
The scheduling is done cooperatively. 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 file descriptors, elapsed timers, pending I/O on message ports, thread and process termination, and even customized callback functions.