User-Level Threads
To make threads really fast, they should be implemented at the user level
A user-level thread is managed entirely by the run-time system (user-level code that is linked with your program).
Each thread is represented simply by a PC, registers, stack and a little control block, managed in the user’s address space.
Creating a new thread, switching between threads, and synchronizing between threads can all be done without kernel involvement.