To model concurrent activities. Assigning one thread to each activity can be a great simplification compared to multiplexing the states of multiple activities in a single thread. This is why most server software and embedded software is multithreaded. To use multiple CPU cores simultaneously for speeding up computations. This is why many High Performance Computing (HPC) applications are multithrea