<Li> Thread crashes a process: an illegal operation performed by a thread crashes the entire process; therefore, one misbehaving thread can disrupt the processing of all the other threads in the application . </Li> <P> Operating systems schedule threads either preemptively or cooperatively . On multi-user operating systems, preemptive multithreading is the more widely used approach for its finer grained control over execution time via context switching . However, preemptive scheduling may context switch threads at moments unanticipated by programmers therefore causing lock convoy, priority inversion, or other side - effects . In contrast, cooperative multithreading relies on threads to relinquish control of execution thus ensuring that threads run to completion . This can create problems if a cooperatively multitasked thread blocks by waiting on a resource or if it starves other threads by not yielding control of execution during intensive computation . </P> <P> Until the early 2000s, most desktop computers had only one single - core CPU, with no support for hardware threads, although threads were still used on such computers because switching between threads was generally still quicker than full - process context switches . In 2002, Intel added support for simultaneous multithreading to the Pentium 4 processor, under the name hyper - threading; in 2005, they introduced the dual - core Pentium D processor and AMD introduced the dual - core Athlon 64 X2 processor . </P> <P> Processors in embedded systems, which have higher requirements for real - time behaviors, might support multithreading by decreasing the thread - switch time, perhaps by allocating a dedicated register file for each thread instead of saving / restoring a common register file . </P>

Are user programs executed by kernel threads or user threads