Asynchronous cooking
Let's make some mashed potatoes
- Take a pot fill it with water and put it on the stove. Turn on the stove.
- Sit next to it and wait till the water boils.
- Take out some potatoes, peal them, wash them, and cut them into little pieces.
- Put the potato in the water on the stove.
- Sit next to it till the potato becomes soft.
- Take out the potato and smash it.
You might have a better recipe, but I guess this covers it. However, most likely you will notice that there are two steps where you basically sit idle watching the water to boil.
Even if you don't have anything else to cook or anything else to do you could finish this job sooner.
You could take step 3 (pealing the potatoes) and do it while the water is warming up.
You could also take the time you spent waiting for the potato to be cook in step 5 to do something else. Cook some other meal, fill the washing machine, etc.
Basically you could take the time you (the CPU) is waiting for some external task to complete, and do something else.
This is basically asynchronous cooking.