Multithreading allows a process to have multiple threads that can perform tasks simultaneously. A word processor for example may have one thread for displaying graphics, another for responding to keystrokes, and a third for spell checking in the background. There are three main multithreading models: many-to-one maps many user threads to one kernel thread but blocks if a thread makes a blocking system call; one-to-one maps each user thread to a kernel thread allowing more concurrency; many-to-many multiplexes user threads to kernel threads allowing developers to create many user threads and kernel threads to run in parallel without blocking.