- Singletasking in Early Computing
- One CPU/ Computer can run one program(process) at a time

- Multitasking in Early Computing
- One CPU/ Computer can run Multiple programs(process) at a time
- by switching between executiong one program at a time for a little time, and then switch to the next

- Multithreading
- One CPU / Computer can run Multiple programs(process) at a time
- with multiple threads of execution inside

- Multithreading With Multiple CPUs
- Multiple CPUs / Computer can run Multiple programs(process) at a time
- with multiple threads of execution inside
- it looks as if each application is only executed by single CPU but it is not the case

Why Multithreading
- Better utilization of a Single CPU
- e.g.) if one thread is waiting for the response to a request sent over the network, then another thread could use the CPU in the meantime to do something else
- Better Utilization of Mutiple CPUs or CPU Cores
- Better User Experience with Regards to Responsiveness
- e.g.) if you click on a button in a GUI and this results in a request being sent over the network, then it matters which thread performs this request. If you use the same thread that is also updating the GUI, then the user might experience the GUI "hanging" while the GUI thread is waiting for the response for the request. Instead, such a request could be performed by a backgroun thread so the GUI thread is free to respond to other user requests in the meantime.
- Better User Experience with Regards to Fairness
- e.g.) imagine a server that receives requests from clients, and only has one thread to execute these requests. If a client sends a requests that takes a long time to process, then all other client's requests would have to wait until that one request has finished. By having each client's request executed by its own thread then no single task can monopolize the CPU completely.