A thread is really just a process without certain rights. Threads only have access to the stack and registers, and use a program counter. The program counter gives the program instructions to the CPU when time. Threads are useful because they hold variables, and are a good way of keeping track of instructions. The Thread actually has the same address as its process, therefore the thread runs "inside the process". If a program uses one process, and the process has one thread, the the thread could be doing one function while the process another. Having more that one thread sharing process address space is called multithreading. Multithreading increases the CPU efficiency due to the possible fact of having more than one process running in User space.