This document provides an overview of hardware multithreading techniques including fine-grained, coarse-grained, and simultaneous multithreading. Fine-grained multithreading switches threads after every instruction to hide latency. Coarse-grained multithreading switches threads only after long stalls to avoid slowing individual threads. Simultaneous multithreading issues instructions from multiple threads each cycle to better utilize functional units.