Computers have hardware support to efficiently execute multiple threads.

These are distinguished from multiprocessing systems (such as multi-core systems) in that the threads must all operate in the same address space, as there is only one shared set of CPU caches and one translation lookaside buffer (TLB).

As a result, multithreading can only take advantage of parallelism within a program, whereas multiprocessing systems can run multiple programs in parallel. Where multiprocessing systems include multiple complete processing units, multithreading aims to increase utilization of a single core by leveraging thread-level as well as instruction-level parallelism.

As the two techniques are complementary, they are sometimes combined in systems with multiple multithreading CPUs and in CPUs with multiple multithreading cores.

Read the rest of the article here